例如,我一直看到env
使用和不使用取消引用的接口指针
env->DoSomething(arguments)
对比
(*env)->DoSomething(env, arguments)
它们实际上是不同的东西吗?是否来自较旧的 JNI 实现?
例如,我一直看到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 参数作为对象方法调用语义的一部分隐式传递。