2015-10-12 67 views
1

我有以下JNI方法,返回列表<無符號字符*>從C++到Java使用JNI

JNIEXPORT jobject JNICALL Java_projlib_DeserializeBuffer 
(JNIEnv *env, jobject obj, jbyteArray inBufferData) 

我已創建的unsigned char*列表,並使用從我的C的inBufferData提取某些數據填充它++代碼

list<unsigned char*> returnBuffer 

我想給returnBuffer回到我的Java代碼,它將被字節數組,List<byte[]>的名單。

請告訴我如何通過JNI通過jobject傳遞無符號字符*的列表,然後通過JNI獲取它以便進一步處理。

回答

1

您將無法直接執行此操作。您必須在C++中實例化所需Java列表實現的實例(因爲List是一個接口),將它放入jobject,然後從列表中添加jbytearray項目,然後返回列表。

因爲我沒有工作JNI的環境中,這個片段只是illustrational(隨意,當你得到它的工作進行編輯),但你需要的東西可以通過這種方式實現:

jclass arrayListClass = env->FindClass("java/util/ArrayList"); // Find ArrayList class 
jmethodID constructor = env->GetMethodID(arrayListClass, "<init>", "()V"); // Find ArrayList constructor 
jobject arrayList = env->NewObject(arrayListClass, constructor); // Create new ArrayList instance 
jmethodID add = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); // Find the ArrayList::add method 
jbyteArray item =env->NewByteArray(10); // Instantiate a new byte[] 
env->CallBooleanMethod(arrayList, add, item); // Add the byte[] to the ArrayList 
+0

我對C++很新,你能分享一些片段嗎? – AnkitG

+0

@AnkitG我添加了一個片段,但是因爲我沒有一個可用的JNI環境來測試它,所以它只是一個例子,隨時提供反饋或編輯它。 –

+0

@AnkitG我更新了片段,'add'方法的簽名是錯誤的,它導致了Java異常。 –

相關問題