我如何将两个值传递到JNI中并扔给C,然后C进行更改并更新值。如何获取这两个值(maxPower,index),然后在Java中查看呢?他们总是回到零。
JNIEXPORT jdouble JNICALL Java_com_TV (
JNIEnv* env, jobject obj, jdouble maxPower, jint index)
{
jdouble result = 0;
result = Feature_TV(2, &maxPower, &index );
return result;
}
//这是它调用的c函数,实际上它的作用还不止于此
//演示程序应返回结果60,maxPower和索引应为-5.0和-2。
double Feature_TV(double * maxPwr, int * maxPwrIdx ) {
*maxPwr = -5.0;
*maxPwrIdx = -2;
/// do something
return 60;
}
最佳答案
就像Java一样,由于C是按值传递,因此无法修改传递给Java_com_TV
的变量。当您调用Feature_TV
并传递maxPower
和index
的地址时,这些地址属于Java_com_TV中的局部变量,因此看不到任何外部影响。
做自己想做的事
使com.TV
接受具有maxPower和index作为字段的对象,并修改JNI中的字段,或者
使它返回这样的对象,并创建对象并在JNI中设置字段。