我一直看到使用和不使用解除引用的env
接口指针,例如
env->DoSomething(arguments)
VS
(*env)->DoSomething(env, arguments)
它们实际上是不同的东西吗?是来自较旧的JNI实现吗?
答案 0 :(得分:3)
他们是同一件事;只是一个小宏魔术。在C ++上下文中启用了更好的(第一个)语法。
答案 1 :(得分:2)
从wikipedia开始在C和C ++中编写jni代码之间的区别:
请注意,C ++ JNI代码在语法上比C JNI略微清晰 代码因为像Java一样,C ++使用对象方法调用语义。 这意味着在C中,使用(* env) - >取消引用env参数。 并且必须将env显式传递给JNIEnv方法。在C ++中,env 参数使用env->取消引用和env参数是 隐式传递作为对象方法调用语义的一部分。