jni中java和c++数组的转换

和String一样,JNI为Java基本类型的数组提供了j*Array类型,比如int[]对应的就是jintArray。来看一个传递int数组的例子,

Java代码:

JNIEXPORT jint JNICALL Java_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr){

    jint *carr;
    carr = env->GetIntArrayElements(arr, false);

    if(carr == NULL) {
        return 0;
    }

    jint sum = 0;
    for(int i=0; i<10; i++) {
        sum += carr[i];
    }
 
    env->ReleaseIntArrayElements(arr, carr, 0);
    return sum;
}

这个例子中的GetIntArrayElements和ReleaseIntArrayElements函数就是JNI提供用于处理int数组的函数。如果试图用arr的方式去访问jintArray类型,毫无疑问会出错。JNI还提供了另一对函数GetIntArrayRegion和 ReleaseIntArrayRegion访问int数组,就不介绍了,对于其他基本类型的数组,方法类似。

你可能感兴趣的:(jni中java和c++数组的转换)