[英]JNI: transfer a multiple-dimension java array to c program
在Java中,定義了非基本對象的多維數組,例如Integer[][] arr
。 一個人應該如何通過JNI在C程序中訪問數組arr
?
public class Foo {
public static Integer[][] arr = {{0}, {1, 2}, {3, 4, 5}};
}
首先,獲取字段ID:
jclass clazz = (*env)->FindClass(env, "fully/qualified/package/Foo");
jfieldID field = (*env)->GetFieldID(env, clazz, "arr", "[[Ljava/lang/Integer;" );
然后,您將需要使用它來獲取實際字段。 假設你有一個jobject
類型的Foo
稱為fooObj
:
jobject arrObj = (*env)->GetObjectField(env, fooObj, field);
可以將arr
jObjectArray
轉換為jObjectArray
,並且可以使用jni數組函數來操縱數組。 文檔可以在這里找到。
由於您具有2D整數對象數組,因此必須通過通常的方法從Integer類獲取基本類型。
目前,不可能將某些非基本對象的多維數組直接從Java程序傳輸到C程序。
解決此問題的方法是制作非原始多維數組的原始版本,並將原始多維數組從Java傳輸到C。無論如何,這樣的多維數組會作為jobjectArray
本地傳輸。
二維整數數組的工作概述如下:
jobjectArray
獲得; GetObjectArrayElement
遍歷每行 ; GetIntArrayElements
函數迭代每個單元格 ,例如jint *val = (*env)->GetIntArrayElements(env, row, NULL);
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.