jni jiniArray作为输出参数不会更改参数的值

时间:2019-02-16 14:20:56

标签: java c++ arrays java-native-interface

我正在尝试从C ++程序调用Java静态方法,我已经获得了以下Java代码:

Undefined name 'auth'.

然后在cpp代码中我有:

 var oneDrivePath = Environment.GetEnvironmentVariable("OneDriveConsumer");

在main.cpp中,我已经:

    // 123.11.1.1, 123.1.1.12, 123.322.12.1
    String list = merchant.getAllowed_ip_address();
    String ip = request.getRemoteAddr().trim();
    boolean inthelist = false;
    for (String aip : list.split(",")) {
        if (aip.trim().equals(ip)) {
           inthelist=true;
           break;
        }
    }

输出为:

public static int[] arrayFunc(int [] array) {
    int [] newArray = copyOf(array, array.length);
    for(int i = 0; i < newArray.length; ++i) {
        newArray[i] += 1;
    }
    return newArray;
}

我希望最后3行应为“ 1 2 3”。但实际上不是。那么我的程序在哪里出错了,以及如何解决?

非常感谢。

1 个答案:

答案 0 :(得分:3)

您不能将jintArray作为常规C数组进行访问。您需要使用适当的JNI函数来访问数据:

jintArray ret = CallStaticFunction("arrayFunc", buf, 3);
int *p = env->GetIntArrayElements(ret, NULL);
for(int i=0;i<3;++i){
    printf("%d\n", p[i]);
}
env->ReleaseIntArrayElements(ret, p, JNI_ABORT);

有关这些功能如何工作的更多信息,请参见the documentation

相关问题