2012-11-30 20 views
0

我一直在尋找一點點來解決如何解決這個問題,但沒有發現我很正確地回答了這個問題。我想我很接近;我會想一個jint *和int *,以及使用(* ENV) - > SetIntArrayRegion(...)函數,從正常組成jintArray的JNI函數int []

// This function will take an array of global integers that already exist in the 
// c-side of the program, we'll call them 'data_ints[91]' (there are 91 just to clarify.) 
/*...*/ 
int data_ints[] = {1,2,3,4,/*...*/90,91}; 

JNIEXPORT jintArray JNICALL Java_MarsRoverGUI_getData 
(JNIEnv *, jobject, jint) 
{ 
    jintArray out_ints; 
    jint *outElements; 
    int i; 

    out_ints = (*env)->NewIntArray(env, 91); 
    outElements = (*env)->GetIntArrayElements(env,out_ints,0); 
    for (i = 0; i < 91; i++) 
    { 
     outElements[i] = data_ints[i]; 
    } 
    (*env)->ReleaseIntArrayElements(env,out_ints,outElements,0); 

    // returns data_ints as a jintArray 
    return out_ints; 
} 

就離我有多近?我沒有一種有效的方法來測試JNI /:隨時提出建議!

grazie全部

+0

看起來不錯,但你只需要找到一種有效的測試方法。你總是可以嘗試編譯和鏈接它,並執行一個測試程序。 – EJP

回答

1

如果我很好地理解你的問題,這應該適合你。您似乎對int/jint轉換感到不安,但您不必爲jint只是int的typedef。

JNIEXPORT jintArray JNICALL Java_MarsRoverGUI_getData 
(JNIEnv *, jobject, jint) 
{ 
    jintArray out_ints; 

    out_ints = (*env)->NewIntArray(env, 91); 
    (*env)->SetIntArrayRegion(env, out_ints, 0, 91, data_ints); 

    // returns data_ints as a jintArray 
    return out_ints; 
} 

請告訴我,如果有的話,似乎都不清楚,或者如果我誤解你的問題!

+0

太棒了。感謝您清理jint/int typedef sitch mbrenon !! – Ian