最近使用jni在vc中调用java类中的方法,java中的方法的一个参数是string[] 数组,在VC中把指针传进了JAVA中,在JAVA中修改了数组中的每个成员,希望在VC中得到JAVA修改后的结果,但是每次执行都是出错,但是如果在JAVA中不对数组这个参数进行修改操作就不出错。仔细一想,原来是JAVA的引用问题,JAVA并没有如VC期望的那样,把传进来的指针的内容改变,而是又生成一个新的字符串,把指针指向了新的字符串,结果VC立刻察觉有人动了他的指针指向,报错了,VC是希望JAVA直接修改传给它的指针的内容。
不知道各位有什么办法,去直接修改一个数组成员的值,而不是修改它的引用?
不知道各位有什么办法,去直接修改一个数组成员的值,而不是修改它的引用?
jfloat *body = env->GetFloatArrayElements(jSetArray, 0); float* fArray = new float[len];
for(int i = 0; i < len; i++)
{
fArray[i] = body[i];
}//这里就可以用fArray了 env->ReleaseFloatArrayElements(jSetArray, body, 0); delete fArray;
return NULL;
} //获取参数C---->Java {
jsize len = env->GetArrayLength(jSetArray);
jfloatArray deviceArray = env->NewFloatArray(len);
jfloat* body = env->GetFloatArrayElements(deviceArray, 0);//这里就可以用了
env->ReleaseFloatArrayElements(deviceArray, body, 0); return deviceArray;