2014年2月5日 星期三

JNI错误之:error: base operand of '->' has non-pointer type '_JNIEnv'

第一次使用JNI的时候,我是用C实现的,但是我实现的方法写成了C++的格式,比如:
jstring Java_com_unistron_barcode_getBarcode(JNIEnv *env, jobject jthis, int cmd){
return env->NewStringUTF((char *) "Hello from JNI !");
}
这个方法在调用的时候就会报这个错误,因为c和c++对JNIEnv的定义是不同的,从jni.h下面代码看得出来:

if defined(__cplusplus)

typedef _JNIEnv JNIEnv;
typedef _JavaVM JavaVM;

else

typedef const struct JNINativeInterface* JNIEnv;
typedef const struct JNIInvokeInterface* JavaVM;

endif

c++是由struct _JNIEnv实现的
所以正确的返回应该是:
jstring Java_com_unistron_barcode_getBarcode(JNIEnv *env, jobject jthis, int cmd){
//return (*env)->NewStringUTF(env, "Hello from JNI !");//如果是用C语言格式就用这种方式
//return env->NewStringUTF((char *)"Hello from JNI !");//C++用这种格式
}
声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息
原文作者: LakeSide
原文地址: http://my.eoe.cn/lakeside/archive/3198.html

沒有留言:

張貼留言