作为输出参数的jni jiniArray不';t改变参数的值 我尝试调用C++程序中的java静态方法,我得到了这个java代码: 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; }

作为输出参数的jni jiniArray不';t改变参数的值 我尝试调用C++程序中的java静态方法,我得到了这个java代码: 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; },java,c++,arrays,java-native-interface,Java,C++,Arrays,Java Native Interface,我希望最后3行应该是“1 2 3”。但事实并非如此。那么,我的程序哪里出了问题,如何解决 非常感谢。您不能以常规C数组的形式访问jintArray。您需要使用适当的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]);

我希望最后3行应该是“1 2 3”。但事实并非如此。那么,我的程序哪里出了问题,如何解决


非常感谢。

您不能以常规C数组的形式访问
jintArray
。您需要使用适当的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);
jintArray ret=CallStaticFunction(“arrayFunc”,buf,3);
int*p=env->GetIntArrayElements(ret,NULL);
对于(int i=0;iReleaseIntarayElements(ret、p、JNI_ABORT);

有关这些函数如何工作的更多详细信息,请参阅。

您不能将
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);
jintArray ret=CallStaticFunction(“arrayFunc”,buf,3);
int*p=env->GetIntArrayElements(ret,NULL);
对于(int i=0;iReleaseIntarayElements(ret、p、JNI_ABORT);
有关这些功能如何工作的更多详细信息,请参阅

parameter = 0
parameter = 1
parameter = 2
0
0
0
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);