关于jni中默认方法参数的解释
2017-03-05 00:04
295 查看
包含jni的项目中,一般都创建一个native方法,这个方法的创建会影响在使用javah编译成的.h文件例如:
我在MainActivity中创建了native方法,传递一个int数组:
那么会在.h文件中出现对应的内容:
三个参数JNIEnv *, jobject, jintArray含义:
参数1:在jni.h文件中,可以发现有这样的一行:(我的是在149行,可以Ctrl+f查找JNIEnv)struct _JNIEnv;这里声明了一个结构 为tJNIEnv;
在这里又声明了一个类型:
参数2:obj代表执行此JNI操作的类实例引用,就是哪一个类调用了jni,obj就代表这个类实例化之后的引用。
参数3:你自己想传递的参数,以上是我传递了一个int类型的数组,当然你也可以传递其他数据,但是你需要注意java和C数据类型的转换,例如char C中为 1byte但在java中 为2byte,C没有String等等。
我在MainActivity中创建了native方法,传递一个int数组:
那么会在.h文件中出现对应的内容:
JNIEXPORT void JNICALL Java_com_array_MainActivity_changeArray (JNIEnv * env, jobject obj, jintArray jarrays);
三个参数JNIEnv *, jobject, jintArray含义:
参数1:在jni.h文件中,可以发现有这样的一行:(我的是在149行,可以Ctrl+f查找JNIEnv)struct _JNIEnv;这里声明了一个结构 为tJNIEnv;
在这里又声明了一个类型:
typedef _JNIEnv JNIEnv;这时我们就明白了,第一个参数可以帮我们拿到一个指针,通过该指针可以找到jni.h文件中的各种方法,方便java和C的交互。
参数2:obj代表执行此JNI操作的类实例引用,就是哪一个类调用了jni,obj就代表这个类实例化之后的引用。
参数3:你自己想传递的参数,以上是我传递了一个int类型的数组,当然你也可以传递其他数据,但是你需要注意java和C数据类型的转换,例如char C中为 1byte但在java中 为2byte,C没有String等等。
相关文章推荐
- 关于Python的属性、参数、方法的解释、区别
- viewpager 三个默认方法的参数解释
- 关于Android Canvas.drawText方法中的坐标参数的正确解释
- 关于Android Canvas.drawText方法中的坐标参数的正确解释
- 关于Android Canvas.drawText方法中的坐标参数的正确解释
- 关于Android Canvas.drawText方法中的坐标参数的正确解释
- 关于Android Canvas.drawText方法中的坐标参数的正确解释
- 关于Android Canvas.drawText方法中的坐标参数的正确解释
- 关于闹钟设置AlarmManager类方法参数解释
- C#: 方法的默认参数
- 关于执行计划里recursivecalls,dbblockgets和consistentgets参数的解释
- 关于Java中方法调用时参数的传递
- DOT NET中关于DataAdapter 的update方法错误现象的解释
- 关于SQL Server 2005内置加密方法接受输入参数的最大长度
- 关于 web应用程序建立在非默认路径【wwwroot】的方法 vs2002 vs2003 相关
- 在AIX上用IBM的JVM,内存溢出时默认地会产生javacore文件(关于cpu的)和heapdump文件(关于内存的)。手动产生堆栈文件的方法是使用kill -3
- 关于Struts2 Checkboxlist 多个参数时不能默认选中
- 关于"Java中方法参数的传递方式"的探讨
- C#关于参数为null(空值)的方法调用,重载顺序选择彻底研究
- Java编程语言和Java指南中关于Java的参数传递的解释