2013-01-02 70 views
0

我有那些兩段代碼,第一個是:在JNI使用jlong​​Array與Android NDK

JNIEXPORT jlongArray* JNICALL Java_com_home_overlay_activity_MainActivity_ProcessPointer(JNIEnv* env, jobject) { 

    jlongArray blobs_arr; 

    return &blobs_arr; 
} 

,第二個是:

JNIEXPORT jlongArray JNICALL Java_com_home_overlay_activity_MainActivity_Process(JNIEnv* env, jobject) { 

    jlongArray blobs_arr; 

    return blobs_arr; 
} 

我要的是回到多頭排列,以java代碼。

第一次運行好,而第二個不行,有什麼問題在這裏與恢復多頭排列這種方式?

+0

工作? – njzk2

+0

我沒有明白。它解決了我寫在第一個答案 –

+0

註釋的解決方案如果問題解決了,請寫出溶液作爲答案,並接受它。如果問題與問題無關,請關閉它。此外,第一個片段是非常,非常錯誤的 - 它不僅不會將數據返回到Java,這是錯的C級,也因爲它返回堆棧變量的地址。 –

回答

0

我的申請沒有被閱讀jni.h但工作..這是奇怪的,當我設置NDKROOT變量這一切正確是由JAVAH產生的其中一個

1

在Java中沒有指針,所以我認爲,如果第一個代碼片段的實際工作,就不會產生你想要的所有東西。它可能會返回C jlong​​Array的內存地址。

至於第二段代碼,除了它返回一個未初始化的對象,可能是NULL,可能是一些隨機內存垃圾,這可能會導致Java端的意外行爲,我看不到任何問題。也許你應該嘗試在C部分,它初始化爲NULL,或嘗試使通過實際備案的數組,以便您可以測試在真實條件下的代碼的行爲您的代碼段更加逼真。

+0

我的問題是不是編碼,它的編譯,該代碼不會編譯所有,反正我的應用程序不讀jni.h但工作..這是奇怪的,當我設置NDKROOT變量這一切工作正常..但其他問題彈出,我可以在另一個線程張貼...謝謝 –