Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C/C+传递参数+;将JNI转换为Java并获得修改后的值_Java_C++_C_Java Native Interface - Fatal编程技术网

从C/C+传递参数+;将JNI转换为Java并获得修改后的值

从C/C+传递参数+;将JNI转换为Java并获得修改后的值,java,c++,c,java-native-interface,Java,C++,C,Java Native Interface,简短问题: 将参数从C++/C JNI传递给应该修改的Java方法。修改后的结果在C/C++JNI中可用吗?有什么办法吗?除了从java返回和回调之外 如果上述内容不清楚,请继续: 使用jcharArray从C/C++JNI调用下面的函数。下面的Java函数应该处理传递的字符数组,并将最终结果存储在同一个数组中。这样修改后的结果将在C/C++JNI中可用 我有一个接受char[]的java函数,如下所示 void GetName(char[] s) { String t = "Test"

简短问题:

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

如果上述内容不清楚,请继续:

使用jcharArray从C/C++JNI调用下面的函数。下面的Java函数应该处理传递的字符数组,并将最终结果存储在同一个数组中。这样修改后的结果将在C/C++JNI中可用

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

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

我怎样才能做到这一点。。。我得到的所有示例都是另一种方式,比如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(使用者侦听器){
accept(t.toCharArray());
}

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

void GetName(char[] s)
{
    String t = "Test";
    // Work on t and store the result in s
    s = t.toCharArray();
}
void GetName(char[] s) to void GetName(PersonName obj)
现在,我在JNI中创建PersonName对象,并将其作为参数传递给java函数。稍后,我将使用相同的对象调用PersonName类的getter方法来获取值char[]RetriveName()


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

Hint是否有效void GetName(char[]s){s[0]='T';s[1]='e';s[2]='s';s[3]='T';}。在C语言中不能通过引用传递。C语言通过值传递,也可以传递指针。在C++中,可以通过值、引用或指针传递。请相应地更新语言标签。另外,由于没有语言“C/C++”,所以请编辑您的帖子。GetName就是这样做的:为s取一个值,通过为s赋值一个新值来丢弃它,然后通过返回来丢弃它。它没有效果。一个非常好的编译器/静态分析工具可能会告诉您这些事情。(一般做法:不要替换参数变量中的值[为算法做准备的小调整除外])。请参阅答案,以了解执行所需操作的方法。