如何修改从java传递给jni的int参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改从java传递给jni的int参数相关的知识,希望对你有一定的参考价值。
我将一个名为length的int变量传递给JNI以修改其值。
但我没有返回修改后的值。
我的JNI功能:
int change(int length){
length =6;
return something
}
当我在函数调用后使用长度值时,它具有默认值本身而不是修改后的值。
为什么我没有得到修改后的值?
答案
有两种方法:
1)第一个是最简单的,只返回长度:
int change(int length){
length = 6;
return length;
}
注: Java始终是pass-by-value!
2)第二个有点棘手:
您必须创建一个方法才能设置和获取length
值。
像这样的东西:
public class FooBar { //This is you class with the length var
private int _length;
public FooBar(){
_length = 0;
}
//Now we are going to create the SET and GET methods
public GetLength(){
return _length;
}
public SetLength(int length){
_length = length;
}
}
现在您的类看起来类似于上面的类,我们可以这样做:
int change(int length){
SetLength(length);
return something;
}
如果您从另一个类调用它,您应该记得首先创建该类的对象,如下例所示:
FooBar foo1 = new FooBar();
//things and things here
int change(int length){
foo1.SetLength(length);
return something;
}
如您所见,lenght
变量现在是私有的,因此我们需要始终使用:
GetLength
为了检索它的价值。SetLength
为了设定新的价值。
java中的每个类都应该像这样工作,只是java编程的好习惯!
以上是关于如何修改从java传递给jni的int参数的主要内容,如果未能解决你的问题,请参考以下文章
JNI内通过参数形式从C/C++中传递string类型数据至Java层
JNI学习笔记2-Java传给C-C代码中向logcat输出内容-C代码回调java方法