2012-02-09 35 views
1

如何將兩個值傳遞到我的JNI中,然後C進行更改並更新值。我如何獲得這兩個值(maxPower,index),然後在Java中看到?他們總是迴歸爲零。JNI如何將值更新爲int和雙字段

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; 
} 

//此處是調用它實際上比這更但是 //演示,它應該返回結果60和牛魔王和指標應該是-5.0和-2 C函數..

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

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

    /// do something 

    return 60; 
} 

回答

3

無法修改傳遞給Java_com_TV的變量,因爲C是按值傳遞的,就像Java一樣。當您撥打Feature_TV並傳遞maxPowerindex的地址時,地址是Java_com_TV中的局部變量,並且不會看到外部影響。

做你想做的事,你既可以

  1. 使com.TV接受了牛魔王和索引字段的對象是什麼,和修改JNI字段,或
  2. 讓它返回這樣一個對象,並創建對象並在JNI中設置字段。
+0

我想我會做的是做一個數組看起來好像處理數組 – JPM 2012-02-09 19:01:55