首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将参数从C/C++ JNI传递到Java并获取修改后的值

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

Stack Overflow用户
提问于 2018-07-12 04:45:58
回答 2查看 596关注 0票数 2

简短问题:

将参数从C++/C JNI传递给Java方法,由Java方法进行修改。修改后的结果会回到C/C++ JNI中吗?有什么办法可以做到吗?除了从java返回和回调之外?

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

使用jcharArray从C/C++ JNI调用下面的函数。下面的Java函数应该对传递的char数组起作用,并将最终结果存储在相同的数组中。因此修改后结果将在C/C++ JNI中可用。

我有一个接受char[]的java函数,如下所示

代码语言:javascript
复制
void GetName(char[] s)
{
    String t = "Test";
    // Work on t and store the result in s
    s = t.toCharArray();
}

我怎样才能做到这一点。我得到的所有示例都是Java调用C/C++的另一种方式。

EN

回答 2

Stack Overflow用户

发布于 2018-07-12 04:49:51

Java只支持按值传递。如果要返回引用,则需要执行以下操作之一

a)退货

代码语言:javascript
复制
char[] getName();

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

代码语言:javascript
复制
void getName(char[][] nameArray) {
    nameArray[0] = t.toCharArray();
}

c)回调

代码语言:javascript
复制
void getName(Consumer<char[]> listener) {
    listener.accept(t.toCharArray());
}
票数 6
EN

Stack Overflow用户

发布于 2018-07-17 02:26:55

因此,对于我的场景,我像下面这样修改了声明

代码语言:javascript
复制
void GetName(char[] s) to void GetName(PersonName obj)

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51293928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档