0

我正在为我的本机代码编写 JNI 包装器,我的代码是 fallows

我的Java本机方法->

public native static String GetMimo(String input, String out1,
        String out2);

我的 C 原生方法 ->

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 新手,我如何将这两个变量作为我们在 C 中通过引用获取的方式返回到我的 java 调用中。

4

3 回答 3

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; }
}
于 2013-04-20T12:41:14.447 回答
0

虽然我更喜欢将结果作为返回值返回,但这是 C 中的风格问题。如果你想在 Java 中模仿这种风格,你必须使用容器对象作为参数。传统的方法是传入一个数组对象,期望函数将结果设置到第一个元素中。由于在您的情况下,您使用的是字符串参数,因此您可以创建java.lang.StringBuilder对象并将其作为参数传递,并且该函数可以附加值。

无论哪种情况,您都必须在 C 端使用 JNI API 做大量工作,才能将您的值设置到参数对象中。

于 2013-04-20T21:51:13.360 回答
-1

你不能。在 Java 中,参数是按值传递的。因此,该方法接收到调用者对 out1(和 out2)的引用的副本。调用者不会看到您分配给此副本的任何内容,因为它是一个副本。

于 2013-04-20T12:40:48.187 回答