我一直看到env
接口指针使用或不使用解引用,例如
env->DoSomething(arguments)
与
(*env)->DoSomething(env, arguments)
它们实际上是不同的东西吗?是否来自较旧的JNI实现?
它们是一样的;只是一点宏观魔术。更好的(第一种)语法是在c++上下文中启用的。
这是用C和c++编写jni代码的区别,来自wikipedia:
注意c++ JNI代码在语法上比C JNI稍微干净一些因为像Java一样,c++使用对象方法调用语义。这意味着在C中,使用(*env)->来解引用env参数。和env必须显式地传递给JNIEnv方法。在c++中,env参数使用env->解引用,env参数为作为对象方法调用语义的一部分隐式传递。