2011-08-09 57 views
1

我一直看到使用和不使用非关联的env接口指针,例如JNI接口指针混乱

env->DoSomething(arguments) 

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

他们是否实际上是不同的东西?是否来自较早的JNI实现?

回答

2

这是一个在C和C++,从wikipedia写JNI代码之间的区别:

需要注意的是C++ JNI代码比C JNI 代码,因为像Java语法稍微干净,C++使用对象方法调用的语义。这意味着在C中,使用(* env) - > 取消了env参数的引用,并且必须将env明确地传递给JNIEnv方法。在C++中,使用env->取消引用env 参数,并且将env参数 作为对象方法调用语义的一部分隐式传递。

3

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