最近在JNI相关项目中遇到一个问题:在Java层传入多个int类型的参数,在jni层修改参数值或地址之后重新返回到Java层。这应该算是基本知识了,尤其是基本类型的参数往往看似简单,所以在之前学习jni时就一笔带过了,结果现在突然遇到这个问题竟然需要再查找资料学习,因此这周在重新复习一遍基础知识之后将此记录一下。走的再远,也不要忘记脚底的路。
还是用Demo来解释下需求和对应解决方案吧
public class LibraryManager {
static{
System.loadLibrary("libtest");
}
public final static native int add1(int arg1, int arg2, int result);
public final static native int add2(int arg1, int arg2, int result);
}
在Java层写了两个方法分别模拟这个需求,在底层对arg1和arg2参数做操作,之后将结果存入result中,希望能在Java层使用result,至于方法的返回值,则是模拟表示方法执行成功与否的标志位。
下面分别在jni中用两种方式实现该需求,当然这两种都是典型错误的。
JNIEXPORT jint JNICALL Java_com_xxx_LibraryManager_add1