美文网首页
jni中java和c++数组的转换

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

作者: zuolingfeng | 来源:发表于2015-08-06 22:00 被阅读1736次

和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++数组的转换

      本文链接:https://www.haomeiwen.com/subject/uvkbqttx.html