最近在做android开发涉及到JNI的函数调用,总结了一些经验。
1.对于JNI中有多维数组相关参数传递的情况,可以将多维数组化为一维数组,然后进行传递。
因为在JAVA中int[3][4] 与int[12]是可以相互转化的。
2.对于一维数组的传递,记录如下:
JNIEXPORT jbyteArray JNICALL JNI_SaveAsBuffer
(JNIEnv *env,jclass clazz, ,jintarray in)
{//in is a int[][]
jbyteArray byteArr = 0;
MLong byteSize = 30;
jbyte temp[30] = {0};
jint i,j,mData[100][100]; //只是测试,固定的数组大小
jarray myarray;
int size = env->GetArrayLength(in);
for (i = 0; i < size && i<100; i++)
{
myarray = (jarray)(env->GetObjectArrayElement(in, i));
int col = env->GetArrayLength(myarray);
jint *coldata = env->GetIntArrayElements((jintArray)myarray, 0 );
for (j=0; j<col && j <100; j++)
{
mData[i][j] = coldata[j];//获取数据
}
env->ReleaseIntArrayElements((jintArray)myarray, coldata,0 );
}
byteArr = env->NewByteArray(byteSize);
env->SetByteArrayRegion(byteArr,0,byteSize,(jbyte*)temp);
return byteArr;
}
上面例子包含了多维数组的传入处理,及一维数组的返回。
对于不同类型的对象调用的创建函数是不同的,这个需要查找JNI头文件。
可以看附件
分享到:
相关推荐
JNI 各种参数传递,基本数据类型,自定义对象,系统对象
本文件是 JNI 传递和返回基本参数的 Demo,详细介绍见博客:https://blog.csdn.net/u011520181/article/details/79765336,无法资源分设置 0 分,也可以去博客下面的 github 地址下载
java jni 传递汉字参数,包括java传入dll 从dll传出到java 包括全部 java 代码 工程文件 全部vc++6.0 Dll 代码 工程文件 找了好久资料才完成的,传上来省的大家再走弯路。
JNI中C和Java参数传递详细例子,各种数据类型,基本类型,数据,结构体,DEMO,非常适合初学者,一看就明,详细例子
android jni 传递对象的demo,展示了如何在java与C之间传递对象。详细介绍见相关博客。
Jni中C++和Java的参数传递如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用VC++6.0实现JNI的最简单的...
一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList,ArrayList嵌套ArrayList<ArrayList<String>>等。
Jni中C和Java的参数传递.doc
java jni 传递汉字参数,包括java传入dll 从dll传出到java 读写ini 包括全部 java 代码 工程文件 全部vc++6.0 Dll 代码 工程文件 找了好久资料才完成的,传上来省的大家再走弯路。
jni编写的一个示例,示例中包含一带参数的有返回值的函数。
JNI开发Java调用C传递int、String、Array类型参数; 详情参考: int类型: (https://blog.csdn.net/niuba123456/article/details/80959892) String类型(https://blog.csdn.net/niuba123456/article/details/80977247);...
实现了jni 中java向vc dll传递list参数/String参数 对象的接口。vc代码可用vc6.0运行编译,java调用接口在src\common\CameraUtil.java里面。测试了好久才实现的(涉及到项目机密,部分资源文件没有上传,内部方法是...
JNI是java调用C++程序的一种实现方法,网上有一些相关的资料,但不一定能适用,这个文档我在学习JNI时综合网上资料总结的,本人亲测能够实现,希望下载的网友有什么问题多多反馈,希望对学习JNI的朋友有所帮助
Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载...
JNI数组参数传递,在使用JNI编程时注意转换参数,尤其是数组的出入与传出。
。。。
网上有很多资料介绍jni数组,但是往往都是或者传递的参数为数组或者返回值为数组,本人看后自己写了一个二者都为数组的情形 可以直接用eclipse进行导入
Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载).....
传递字符串数组 参数传递 JNI调用 代码清单15-10 在Linux平台上调用C函数的例程——Sample3 public class Sample3 { public native String[] stringMethod(String text); public static void main(String[] ...