美文网首页
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