jni传递二维数组的问题

wby8888 2006-05-25 05:03:26
比如一个//输入一个boolean二维数组
java代码:
//输入一个boolean二维数组
public native void setArray(boolean[][] blList);
boolean[][] blList = { {true, false},{true,true},{false,false} };
myclass.setArray(blList);
生成头文件代码:

JNIEXPORT void JNICALL myclass_setArray
(JNIEnv *, jobject, jobjectArray);

二维数组boolean[][] 被转换为jobjectArray,
C文件代码:
JNIEXPORT void JNICALL Java_com_sundy_jnidemo_ChangeMethodFromJni_setArray
(JNIEnv *env, jobject, jobjectArray ba)
{
jobject pba = (env)->GetObjectArrayElement (ba, 0 );

jsize len = (env)->GetArrayLength(ba);
int i=0;
for( i=0; i < len; i+=1 )
{
printf( "boolean = %s\n", pba );
}
}问题就是怎么把jobjectArray 转换为一个二维的jbooleanArray
或者把jobjectArray 中的元素(jobject pba = (env)->GetObjectArrayElement (ba, 0 );)
转换为一个一维的jbooleanArray
http://www.iplab.cs.tsukuba.ac.jp/~liuxj/jdk1.2/zh/docs/guide/jni/spec/functions.doc.htm

l#17314
这里边根本没有二维数组的概念,也没有相互转化的方法
救命啊!!
哪位会的给讲一下,最好给出例子代码。
...全文
496 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Preamble 2006-07-10
  • 打赏
  • 举报
回复
个人觉得:
多位数组其实仍然是一位数组,因为内存是一维的

所以二维数组仍然是按一维存放的,
比如3*3
a[i][j] = (a的起始地址+3
*i+j)
()表示内存单元数据。
所以不用转换
低调的小青蛙 2006-07-10
  • 打赏
  • 举报
回复
的确没有二维数组的概念,只有 object array 的概念,

boolean[][] blList 应该这么去理解:

blList 本身是一个 jobjectArray, 这个 array 的每一个元素又是一个 jobjectArray,
blList = {jobjectArray1, jobjectArray2, jobjectArray3}

jobjectArray1 = {true, false}
jobjectArray2 = {true, true}
jobjectArray3 = {false, false}
Kokonol 2006-07-09
  • 打赏
  • 举报
回复
看见高分 0回复的 帖子 一个字------

UP
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:jni教程(very very good) 19 Chap6: JNI传递返回值... 26 15.2.2.3 传递字符串... 28 15.2.2.4 传递整型数组... 29 15.2.2.5 传递字符串数组... 30 15.2.2.6 传递对象数组... 31 Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载)... 55 1、实例一:在jni中调用标准c中自带的函数printf(): 57 2、实例二、调用c 语言用户定义的函数... 58 3、实例三、在jni函数中访问java类中的对象实例域... 58 4、实例四:在jni函数中访问类的静态实例域... 60 5、实例五:在jni函数中调用java对象的方法... 60 6、实例六:在jni函数中调用java类的静态方法... 61 7、实例七:jni函数中传递基本数据类型参数... 62 8、实例八:在jni函数中传递对象类型参数... 62 9、实例九:在jni函数中处理字符串... 63 10、实例十:在jni函数中处理数组... 64 11、实例十一:在jni中的返回值问题... 65 12、实例十二:在jni中创建java类对象:... 66 Chap10:在 Windows 中实现 Java 本地方法... 66 1.Java 调用 C. 67 2.调试... 76 3.其他信息... 79 Chap11:如何在C/C++中调用Java. 80 1.环境搭建... 81 2.初始化虚拟机... 83 3.访问类方法... 85 4访问类属性... 87 5.访问构造函数... 88 6.数组处理... 89 7.中文处理... 89 8.异常... 91 9.线程和同步访问... 91 10.时间... 92 Chap12:基本JNI调用技术(c/c++与java互调) 93 Chap13:JNI的c代码中,另外一个线程获取 JNIEnv. 96 chap 14:当JNI遇到多线程--java对象如何被C++中的多个线程访问?. 97 chap 15:JNI在多线程中的应用... 101 chap 16:JNI限制(多线程)... 105 chap 17:使用 Java Native Interface 的最佳实践... 106 1.性能缺陷... 107 2.正确性缺陷... 117 3.避免常见缺陷... 121 4.结束语... 128 Chap18:JNI设计实践之路... 129 一、 前言... 129 二、 JNI基础知识简介... 130 三、 Java程序调用非Java程序... 131 四、 C/C++访问Java成员变量和成员方法... 138 五、 异常处理... 140 六、 MFC程序中嵌入Java虚拟机... 142 Chap19:JNI编程系列之基础篇... 148 System.loadLibrary("HelloWorld"); 149 JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject); 150 Chap20:JNI编程系列之中级篇(上)... 151 1. Java基本类型的传递... 151 2. String参数的传递... 151 3. 数组类型的传递... 153 4. 二维数组和String数组... 154 Chap21:JNI编程系列之高级篇... 155 1. 在一般的Java类中定义native方法... 156 2. 访问Java类的域和方法... 156 3. 在native方法中使用用户定义的类... 157 4. 异常处理... 158

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧