简短问题:
将参数从C++/C JNI传递给Java方法,由Java方法进行修改。修改后的结果会回到C/C++ JNI中吗?有什么办法可以做到吗?除了从java返回和回调之外?
如果上面的内容不清楚,则继续:
使用jcharArray从C/C++ JNI调用下面的函数。下面的Java函数应该对传递的char数组起作用,并将最终结果存储在相同的数组中。因此修改后结果将在C/C++ JNI中可用。
我有一个接受char[]的java函数,如下所示
void GetName(char[] s)
{
String t = "Test";
// Work on t and store the result in s
s = t.toCharArray();
}
我怎样才能做到这一点。我得到的所有示例都是Java调用C/C++的另一种方式。
发布于 2018-07-12 04:49:51
Java只支持按值传递。如果要返回引用,则需要执行以下操作之一
a)退货
char[] getName();
b)传递一个可变对象来引用它
void getName(char[][] nameArray) {
nameArray[0] = t.toCharArray();
}
c)回调
void getName(Consumer<char[]> listener) {
listener.accept(t.toCharArray());
}
发布于 2018-07-17 02:26:55
因此,对于我的场景,我像下面这样修改了声明
void GetName(char[] s) to void GetName(PersonName obj)
因此,现在,我在JNI中创建了一个PersonName对象,并将其作为参数传递给java函数。稍后,我使用相同的对象调用PersonName类的getter方法来获得值char[] RetriveName();
我还发现,使用jfield也可以获得类数据成员的值,但是这些成员应该是公共的。
https://stackoverflow.com/questions/51293928
复制相似问题