[英]How do I send , pointer to array from JNI C code, to Java code?
如何從JNI C代碼到Java代碼發送指向數組的指針? 例如 :
JNI C代碼:
jclass cls = (*env)->GetObjectClass(env,obj);
jmethodID mid = (*env)->GetMethodID(env,cls,"print"," ?? "); // What should be the signature here ?
jvalue a1,*arr;
a1.i = 2002;
a1.f = 12.90;
a1.c = 's';
a1.j = 344554;
a1.b = TRUE;
arr = &a1;
(*env)->CallVoidMethodA(env,obj,mid,arr);
Java函數:
public void print(?????) { // what should be the argument here ?
// add code here
}
java函數應如何看起來像接收指向數組的指針?
首先,您的代碼有兩個問題:
arr
實際上不是數組(它指向單個jvalue),因此沒有理由通過指針而不是僅僅通過值來傳遞它。 a1.X
任務是無用的,除了最后一個,因為jvalue
是所有可能的原始和引用類型的聯合 。 下一步:不可能將原始C指針傳遞給JNI(雖然可以,但是您只能讓Java將指針視為數字而不是對象)。 您必須創建一個Java數組或緩沖區對象。 如果您要創建一個引用數組,則數組是個好方法,盡管必須復制內存。 如果希望C數組與Java緩沖區共享內存,則緩沖區是很好的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.