(*env).GetStringUTFChars(str, 0) = env->GetStringUTFChars(str, 0)吧而以前我们用JNI的c形式时就是:(*env)->GetStringUTFChars(env, str, 0);

解决方案 »

  1.   

    c形式需要对env指针进行双重deferencing,而且须将env作为第一个参数传给jni函数
      

  2.   

    在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 这个宏
      

  3.   

    to bigc2000(勇者无惧) :关键是我现在用(*env)->这种c的用法会报错.你的意思是JNI现在对c的用法不支持了,要用c的用法必须去掉__cplusplus 这个宏?
    另外,我试过的(*env).这种用法也是可以的,就相当于env->to kingfish(八百里秦川@龙城异客) :对的,我现在用的是.net Studio里面的c++编译器,会是编译器的问题吗?
      

  4.   

    发现一个有趣的问题,我在另一个地方的机器上用.net Studio里面的c++编译器编译就没有问题,不过其中有一点不同.
    即成功这次用的JNI.H是jBuilderX里面的.而失败的那次用的是jBuilder2005里面的,难道会和这个有关?
      

  5.   

    好象是跟编译器有关,不应该是用JNI.H的问题,不过还没有找到问题所在