JNI中的回调函数,C++中的vector数组和Java中int数组的转换
来源:互联网 发布:查学校的软件 编辑:程序博客网 时间:2024/06/03 22:05
简介:
使用JNI的过程中,在Java端使用C++程序中的回调函数,对程序来说很方便,最近在做图形识别的过程中遇到了数组的转换方面的问题,后来仔细想了一下,在网上简单看了点资料,发现在JNI层对vector数组转换,最后在回调中返回到Java端int数组很有规律,不多说,上代码。
//一维数组
int callbackMethod(int num,vector<int> vArray){ int ret = 0; int needsDetach; JNIEnv *env = getJNIEnv(&needsDetach); jintArray jArray = env->NewIntArray(num); jint *jnum = new jint[num]; for(int i = 0; i < num; ++i) { *(jnum + i) = vArray[i]; } env->SetIntArrayRegion(jArray, 0, num, jnum);//现在得到了我们要的jArray,也就是回调函数中返回到Java端的int数组,回调中的参数为(int a,int[] b);JNI中的类型为"I[I" env->CallVoidMethod(mobj, mid, num,jArray);
jthrowable exception = env->ExceptionOccurred(); if (exception) { env->ExceptionDescribe(); ret = -1; } delete[] jnum; return ret;}
//二维数组
int callbackMethod(int num, vector<vector<int> > vArray){ int ret = 0; int needsDetach; JNIEnv *env = getJNIEnv(&needsDetach); jobjectArray jOArray;
jclass intArrCls = env->FindClass("[I"); jOArray = env->NewObjectArray(num, intArrCls, 0);
//二维数组长度为2,循环赋值
for (int i = 0; i < num; i++) { jint tmp[2]; jintArray jiarr = env->NewIntArray(2); for(int j = 0; j < 2; j++) { tmp[j] = vArray[i][j]; } env->SetIntArrayRegion(jiarr, 0, 2, tmp); env->SetObjectArrayElement(jOArray, i, jiarr); env->DeleteLocalRef(jiarr); }
//回调中的参数为(int a,int[] b);JNI中的类型为"I[[I" env->CallVoidMethod(mobj, mid, num, jOArray); jthrowable exception = env->ExceptionOccurred(); if (exception) { env->ExceptionDescribe(); ret = -1; } return ret;}
三维数组之类的同理,加一层for循环赋值即可。
1 0
- JNI中的回调函数,C++中的vector数组和Java中int数组的转换
- java中的int类型和byte数组的相互转换
- JNI中 Java 中字符串 转换成C中的字符数组方法
- Java中的数组和c中的数组
- Java中JNI的使用详解第五篇:C/C++中操作Java中的数组
- java中int类型和byte[]数组之间的转换
- Java中byte[]数组和int之间的转换
- cocos2d-js中的回调函数中世界坐标系和节点坐标系的相互转换
- JNI中C和java传递数组
- java int和byte数组的转换
- java和javascript中的回调函数
- Android和Java中的回调函数
- Matlab中的指针和在Matlab中注册c++dll的回调函数
- c中的回调函数
- C中的回调函数
- Java中的回调函数的用法
- 关于c和java中回调函数的说明
- JAVA中的回调函数
- vs2010winform程序中实现登录数量的控制
- C++读取shp文件源代码并将转化为DXF
- HTTP协议简介
- 8.4 子模块分析之IC
- CocoaPods 使用
- JNI中的回调函数,C++中的vector数组和Java中int数组的转换
- poj1265 Area
- physics
- rk3188开机失败(ump_file_open() 251)
- js知识点记录(2)
- log4j.properties配置
- struts2文件下载 注解版
- Spring AOP (上)
- android 使用代码,自动设置代理IP