简短问题:
将参数从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 ++。
答案 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也可以获取类数据成员的值,但这些成员应该是公共的