【发布时间】:2011-08-09 17:06:50
【问题描述】:
我经常看到 env 接口指针在有和没有取消引用的情况下使用,例如
env->DoSomething(arguments)
对比
(*env)->DoSomething(env, arguments)
它们实际上是不同的东西吗?是否来自较旧的 JNI 实现?
【问题讨论】:
标签: java java-native-interface native-code
我经常看到 env 接口指针在有和没有取消引用的情况下使用,例如
env->DoSomething(arguments)
对比
(*env)->DoSomething(env, arguments)
它们实际上是不同的东西吗?是否来自较旧的 JNI 实现?
【问题讨论】:
标签: java java-native-interface native-code
它们是一样的;只是一点宏魔法。更好的(第一个)语法在 C++ 上下文中启用。
【讨论】:
这就是用C和C++写jni代码的区别,来自wikipedia:
请注意,C++ JNI 代码在语法上比 C JNI 稍微干净一些 代码,因为与 Java 一样,C++ 使用对象方法调用语义。 这意味着在 C 中,使用 (*env)-> 取消引用 env 参数 并且 env 必须显式传递给 JNIEnv 方法。在 C++ 中,环境 使用 env-> 取消引用参数,并且 env 参数是 作为对象方法调用语义的一部分隐式传递。
【讨论】: