【问题标题】:JNI interface pointer confusionJNI接口指针混淆
【发布时间】:2011-08-09 17:06:50
【问题描述】:

我经常看到 env 接口指针在有和没有取消引用的情况下使用,例如

env->DoSomething(arguments)

对比

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

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

【问题讨论】:

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


    【解决方案1】:

    它们是一样的;只是一点宏魔法。更好的(第一个)语法在 C++ 上下文中启用。

    【讨论】:

      【解决方案2】:

      这就是用C和C++写jni代码的区别,来自wikipedia

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-06
        • 1970-01-01
        • 2010-09-25
        • 2011-09-04
        • 2016-11-08
        • 2013-09-30
        相关资源
        最近更新 更多