第二部份,我不知道在第二部分里怎么写代码把c++的数组返回给java;
第二部分里有这样几句:/************** 这下面的代码是返回给java的数组,有些问题,请问怎么写才好????????
jcharArray ret;
ret= env->NewCharArray(env,10);
env->SetCharArrayRegion(env, ret, 0, 10, (jchar *)body);
return(ret);
**********************/
第二部分里有这样几句:/************** 这下面的代码是返回给java的数组,有些问题,请问怎么写才好????????
jcharArray ret;
ret= env->NewCharArray(env,10);
env->SetCharArrayRegion(env, ret, 0, 10, (jchar *)body);
return(ret);
**********************/
jcharArray ret;
ret= env->NewCharArray(10);
env->SetCharArrayRegion(ret, 0, 10, body);
return ret ;
只是在c++里调用JNI函数有点问题,不知道你看的是jdk第几版的书,还是看新书为好。
如过body 是从java 里传过来的,如下:
jchar *body = env>GetCharArrayElements(ja, 0);
jcharArray ret;
ret= env->NewCharArray(len);
env->SetCharArrayRegion(ret, 0, len, (jchar *)pp);
return(ret);
返回的就是正确的。但是如果是我自己定义的c++数组,就不好用,是乱码,如下:
char *buf=new char[len];
for(i=0;i<len;i++)
{
buf[i]=pp[i];
}
jcharArray ret;
ret= env->NewCharArray(len);
env->SetCharArrayRegion(ret, 0, len, (jchar *)buf);
return(ret);
请问怎么改才好?
DllSam.cpp:
JNIEXPORT jbyteArray JNICALL Java_NativeDemo_test2
...
return (jbyteArray)ret;
..
}
NativeDemo.java:
..
byte[] c= ob.test2();
for ( i=0; i<c.length; i++){
System.out.println("array element"+i+ "=" + (char)c[i]);
}
}
public native byte[] test2();
...