JNI如何将值更新为int和double字段

时间:2012-02-09 17:48:43

标签: java java-native-interface pass-by-reference

如何将我传入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函数它实际上比这更多但是for // demo它应该返回结果60,maxPower和index应该是-5.0和-2 ..

double Feature_TV(double * maxPwr, int * maxPwrIdx ) {

    *maxPwr = -5.0;
    *maxPwrIdx = -2;

    /// do something 

     return 60;
}

1 个答案:

答案 0 :(得分:3)

无法修改传递给Java_com_TV的变量,因为C是传值,就像Java一样。当您致电Feature_TV并传递maxPowerindex的地址时,地址属于Java_com_TV中的局部变量,并且无法看到外部效果。< / p>

要做你想做的事,你可以

  1. make com.TV接受一个具有maxPower和index作为字段的对象,并修改JNI中的字段,或
  2. 让它返回这样的对象,并创建对象并在JNI中设置字段。