我如何将两个值传递到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并传递maxPowerindex的地址时,这些地址属于Java_com_TV中的局部变量,因此看不到任何外部影响。

做自己想做的事


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

10-02 09:13