簡體   English   中英

如何將指向數組的指針從JNI C代碼發送到Java代碼?

[英]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函數應如何看起來像接收指向數組的指針?

首先,您的代碼有兩個問題:

  1. arr實際上不是數組(它指向單個jvalue),因此沒有理由通過指針而不是僅僅通過值來傳遞它。
  2. 所有這些a1.X任務是無用的,除了最后一個,因為jvalue是所有可能的原始和引用類型的聯合

下一步:不可能將原始C指針傳遞給JNI(雖然可以,但是您只能讓Java將指針視為數字而不是對象)。 您必須創建一個Java數組或緩沖區對象。 如果您要創建一個引用數組,則數組是個好方法,盡管必須復制內存。 如果希望C數組與Java緩沖區共享內存,則緩沖區是很好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM