我有一個本地函數,我正在通過JNI訪問,需要將數組的內容返回給java。我的函數原型如下:如何在JNI中返回數組?
JNIEXPORT jcharArray JNICALL Java_jniusb_Main_receiveData
(JNIEnv *, jclass, jchar);
它是用javah.exe生成的。
所以在函數的代碼中,我有一個數組''unsigned char InputPacketBuffer [65]',我想返回到java。但是,我有問題映射到我的返回類型'jcharArray'。
在另一個函數中,我使用JNI提供的'GetCharArrayRegion'方法將'jcharArray'類型的輸入參數轉換爲'jchar'數組,然後將其轉換爲'unsigned char'數組。基本上,我需要做與此相反的轉換,但我無法在JNI規範pdf中找到合適的JNI方法。有人知道怎麼做嗎?
UPDATE:
我發現安迪的鏈接正確的JNI功能 - SetCharArrayRegion()。 「Java本地接口 - 程序員指南和規範」給出了使用其功能的不正確示例。
即
(*env)->SetCharArrayRegion(env, elemArr, 0, len, chars);
不編譯。相反,正確的語法是:
(*env).SetCharArrayRegion(elemArr, 0, len, chars);
這些示例對於C代碼是正確的,其中JNIEnv的typedef是JNI函數指針的結構。對於C++方法調用,只需省略已記錄的JNI函數的第一個參數即可。 –