即使把一个String传到java的方法中,也不能改变它
何况是把String传入到c++的本地方法中呢
C++中生成一个GetStringUTFChars的时候会生成一个拷贝的你可以把那个String作为一个对象的属性,传对象到dll中改变这个属性
或者你声明的本地方法返回一个String (jstring)吧

解决方案 »

  1.   

    感谢楼上的。但我还是想问清楚一下:
    我不大熟悉java,按理说String是一个类对象,作为参数传入不能改变其属性?还有第二个问题,我想代码应该没错但就是找不到这个对象里面的String,每次读出来都是空的。我想现在只有用byte[]传了
      

  2.   

    String本来就是不可改变的,一般代码里对String的操作,比如+,实际上是重新生成一个新String再返回。
      

  3.   

    host = (env)->GetStringUTFChars(jhost,0);//从java jstring=>c++ *char
    convertANSIToUNI(env,&ch_response);//从c++ *char=>java jstring
      

  4.   

    jstring convertANSIToUNI(JNIEnv *env,char* cStr)
    {
    int slen = strlen(cStr);
    if(!env||slen==0)
           return NULL;
    jchar* buffer = new jchar[slen];
    int len = MultiByteToWideChar(CP_ACP,0,cStr,strlen(cStr),buffer,slen);
    if(len>0 && len < slen)
           buffer[len]='\0';
    jstring js = env->NewString(buffer,len);
    delete [] buffer;
    return js;
    }