2011-07-29 46 views
2

我想了解JNI,所以我就開始了黑客hellojni,我就遇到了這個問題。getArrayLength()返回一個龐大的數字...

我的Java代碼如下所示:

    short[] buf = new short[16]; 
        Log.d("hello", "before!"); 
        write(buf, 0, 16); 

和我的C代碼如下所示:

jint 
Java_com_example_hellojni_HelloJni_write(JNIEnv* env, jshortArray buf, jint off, jint len) 
{ 
    char debug[1024]; 
    int ii = 0; 
    jsize cbuflen = (*env)->GetArrayLength(env, buf); 

    sprintf(debug, "array length: %d", cbuflen); 
    LOGD(debug); 
... 
... 

輸出是:

數組長度:1079082088

爲什麼陣列長度如此之大?

+0

這是奇怪,甚至通過一個簡單的整數不起作用!這裏發生了什麼!!! – user645402

+0

這真的是你的全部功能,還是有什麼缺失? – EboMike

回答

4

你能證明你的整個JNI的文件?你沒有在你的JNI函數中聲明目標對象。通常的觀點是JNIEnv的* ENV,jobject JAVAOBJECT等,這意味着你認爲什麼是jshortArray實際上是指向一個Java對象,這可以解釋你得到奇怪的結果。

+1

不妨講出來:你的功能應該是這樣的:'jint Java_com_example_hellojni_HelloJni_write(JNIEnv的* ENV,jobject thisObj,jshortArray BUF,jint關,jint LEN)'。 – EboMike