将参数从C/C++JNI传递给Java,得到修改后的值

Pass parameter from C/C++ JNI to Java and get modified value

本文关键字:修改 Java 参数 C++JNI      更新时间:2023-10-16

简短问题:

将一个参数从C++/C JNI传递给应该修改的Java方法。修改后的结果在C/C++JNI中可用吗?有什么办法吗?除了从java返回和回调之外?

如果以上内容不清楚,则继续:

使用jcharArray从C/C++JNI调用以下函数。下面的Java函数应该处理传递的char数组,并将最终结果存储在其中。因此,修改后的结果将在C/C++JNI中返回。

我有一个java函数接受下面中的char[]

void GetName(char[] s)
{
String t = "Test";
// Work on t and store the result in s
s = t.toCharArray();
}

我怎样才能做到这一点。。。我得到了所有其他的例子,比如Java调用C/C++。

Java只支持传递值。如果你想返回一个参考,你需要任一

a( 返回

char[] getName();

b( 传递可变对象以引用它

void getName(char[][] nameArray) {
nameArray[0] = t.toCharArray();
}

c( 通过回电

void getName(Consumer<char[]> listener) {
listener.accept(t.toCharArray());
}

因此,对于我的场景,我修改了如下所示的声明

void GetName(char[] s) to void GetName(PersonName obj)

现在,我在JNI中创建一个PersonName对象,并将其作为参数传递给java函数。稍后,我将使用相同的对象来调用PersonName类的getter方法,以获取值char[]RetriveName((;

我还发现,使用jfield也可以获得类数据成员的值,但这些成员应该是公共