将参数从C / C ++ JNI传递到Java并获取修改后的值

时间:2018-07-11 20:45:58

标签: java c++ c java-native-interface

简短问题:

将参数从C ++ / C JNI传递给应该修改的Java方法。修改后的结果可以在C / C ++ JNI中使用吗?有什么办法吗?除了return和来自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 ++。

2 个答案:

答案 0 :(得分:6)

Java仅支持按值传递。如果您想返回参考,则需要

a)退还

char[] getName();

b)传递一个可变对象以引用它

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

c)回叫

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

答案 1 :(得分:0)

所以对于我的情况,我修改了如下声明

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

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

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