JNI中函数调用时c形式与c++形式的不同而产生的问题 (*env).GetStringUTFChars(str, 0) = env->GetStringUTFChars(str, 0)吧而以前我们用JNI的c形式时就是:(*env)->GetStringUTFChars(env, str, 0); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 c形式需要对env指针进行双重deferencing,而且须将env作为第一个参数传给jni函数 在c++中必须用env->而在C中用(*env)->因为在Jni.h中有如下定义const jchar *(JNICALL *GetStringChars) (JNIEnv *env, jstring str, jboolean *isCopy);#ifdef __cplusplusconst jchar *GetStringChars(jstring str, jboolean *isCopy) { return functions->GetStringChars(this,str,isCopy); }所以,如此,其他函数也一样,如果你非得要用以前用法 就必须去掉 __cplusplus 这个宏 to bigc2000(勇者无惧) :关键是我现在用(*env)->这种c的用法会报错.你的意思是JNI现在对c的用法不支持了,要用c的用法必须去掉__cplusplus 这个宏?另外,我试过的(*env).这种用法也是可以的,就相当于env->to kingfish(八百里秦川@龙城异客) :对的,我现在用的是.net Studio里面的c++编译器,会是编译器的问题吗? 发现一个有趣的问题,我在另一个地方的机器上用.net Studio里面的c++编译器编译就没有问题,不过其中有一点不同.即成功这次用的JNI.H是jBuilderX里面的.而失败的那次用的是jBuilder2005里面的,难道会和这个有关? 好象是跟编译器有关,不应该是用JNI.H的问题,不过还没有找到问题所在 java socket无法正确接受数据 调用JFileChooser的showOpenDialog再调用showSaveDialog就没反应了 技术!求助!命令行javac编译失败..提示内部引用类无法标识 组件的小问题~ 线程问题 jsp+servlet问题 郁闷:在applet中无法播放音乐 请前辈给我点指点 如何动态定义对象、变量或调用方法?请指教。 郁闷呀!!近来安慰一下我吧!! 关于方法调用的问题,向大家请教! 学好JAVA是不是不用懂数据结构,没有分了,请帮忙指点一下
必须用env->而在C中
用
(*env)->因为在Jni.h中有如下定义const jchar *(JNICALL *GetStringChars)
(JNIEnv *env, jstring str, jboolean *isCopy);#ifdef __cplusplusconst jchar *GetStringChars(jstring str, jboolean *isCopy) {
return functions->GetStringChars(this,str,isCopy);
}所以,如此,其他函数也一样,如果你非得要用以前用法 就必须去掉 __cplusplus 这个宏
另外,我试过的(*env).这种用法也是可以的,就相当于env->to kingfish(八百里秦川@龙城异客) :对的,我现在用的是.net Studio里面的c++编译器,会是编译器的问题吗?
即成功这次用的JNI.H是jBuilderX里面的.而失败的那次用的是jBuilder2005里面的,难道会和这个有关?