“NewStringUTF”是指向函数的指针吗?还是功能?

时间:2013-11-15 19:45:54

标签: java c pointers java-native-interface

我正在开发一个项目,我应该使用本机代码。 这是我项目中代码的一部分。

JNIEXPORT jstring JNICALL Java_com_pkg_testcpp_NatTes_nativemethod   
(JNIEnv *env, jobject ob){  
     return (env)->NewStringUTF("NATIVE NON STATIC");
} 

这是用CPP写的。但是当我们在C中编写相同的代码时,

return(* env) - > NewStringUTF(env,“NATIVE NON STATIC”);

我的问题是

1)为什么我们在c之前的env之前使用额外的*?

2)“ NewStringUTF ”它是一个函数指针或函数本身?

3)当通过指针访问结构成员时,我看到->。所以env是一个指向函数指针数组的指针?或者将函数指针作为结构成员的结构?

1 个答案:

答案 0 :(得分:2)

jni.h头文件包含以下行:

#ifdef __cplusplus
typedef JNIEnv_ JNIEnv;
#else
typedef const struct JNINativeInterface_ *JNIEnv;
#endif

JNINativeInterface_是一个结构,主要包含以JNIEnv *作为第一个参数的函数指针,其中还包括NewStringUTF

因此,C中的JNIEnv *实际上是const struct JNINativeInterface_ **,因此您需要取消引用一次,然后才能使用->运算符来访问它的元素。在C ++中,JNIEnv *JNIEnv_ *,JNIEnv_是一个结构,它包含指向JNINativeInterface_的指针,因为它是第一个数据成员,否则定义了提供this作为{JNIEnv *的包装方法1}}第一个参数。