我正在为我的本机代码编写JNI包装器,我的代码是fallows
我的java原生方法 - >
public native static String GetMimo(String input, String out1,
String out2);
My C native方法 - >
jstring Java_test_mimo_mimojni_DataFecth_GetMimo( JNIEnv* env,String input, String output1, String output2);
{
char *outmimoOne , *outmimoTwo;
GetMimo(&outmimo, &outmimoTwo); // My Native code function call , it allocates the memory and fill the data
return (*env)->(env,outmimoTwo);
}
这里我想将数据outmimoOne返回到output1,将outmimoTwo返回到output2。 由于我是Java的新手,我究竟能将这两个变量都返回到我的java调用中,作为我们在C中的引用获取。
答案 0 :(得分:0)
创建一个包含两个引用的对象或数据结构,并返回:
public class Pair<T1, T2> {
private final T1 x;
private final T2 y;
public Pair<T1, T2>(T1 a, T2 b) {
this.x = a;
this.y = b;
}
public T1 getX() { return this.x; }
public T2 getY() { return this.y; }
}
答案 1 :(得分:0)
虽然我更喜欢将结果作为返回值返回,但它是C中的样式问题。如果要在Java中模仿该样式,则必须使用容器对象作为参数。传统的方法是传递一个数组对象,期望函数将结果设置为第一个元素。因为,在您的情况下,您正在使用String参数,您可以创建并传递java.lang.StringBuilder
个对象作为参数,并且该函数可以追加值。
在任何一种情况下,您都必须使用JNI API在C端进行大量工作,以将您的值设置到参数对象中。
答案 2 :(得分:-1)
你做不到。参数在Java中按值传递。因此,该方法接收调用者对out1(和out2)的引用的副本。
表示,调用者无法看到您分配给此副本的任何内容,因为这是一个副本。