JNI接口指针混乱

时间:2011-08-09 17:06:51

标签: java java-native-interface native-code

我一直看到使用和不使用解除引用的env接口指针,例如

env->DoSomething(arguments)

VS

(*env)->DoSomething(env, arguments)

它们实际上是不同的东西吗?是来自较旧的JNI实现吗?

2 个答案:

答案 0 :(得分:3)

他们是同一件事;只是一个小宏魔术。在C ++上下文中启用了更好的(第一个)语法。

答案 1 :(得分:2)

wikipedia开始在C和C ++中编写jni代码之间的区别:

  

请注意,C ++ JNI代码在语法上比C JNI略微清晰   代码因为像Java一样,C ++使用对象方法调用语义。   这意味着在C中,使用(* env) - >取消引用env参数。   并且必须将env显式传递给JNIEnv方法。在C ++中,env   参数使用env->取消引用和env参数是   隐式传递作为对象方法调用语义的一部分。