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参数为作为对象方法调用语义的一部分隐式传递。

最新更新