如何将unsigned char转换为jbyteArray

时间:2011-01-12 20:19:50

标签: java java-native-interface

如何将unsigned char缓冲区转换为jbyteArray?我需要一个C ++缓冲区并通过JNI返回Java。

这是我目前的代码。

JNIEXPORT jbyteArray JNICALL Java_com_rmsdk_wrapper_RMServices_getImageBuffer(JNIEnv *env, jobject thiso,
    jint w, jint h) {
    emh::PNGSurface * surface = services->getImageBuffer(w,h);
jbyteArray * buffer = (jbyteArray*)malloc(sizeof(jbyteArray)*surface->getBufferSize());
    unsigned char * imgBuff = surface->getBuffer();

    for(int i = 0; i < surface->getBufferSize();i++){
        buffer = imgBuff;
        buffer++;
        imgBuff++;
    }
    return *buffer;
};

编译时出现以下错误。

Compile++ thumb  : rmsdk <= RMSDK_Wrapper_JNI.cpp
/home/marcos/dev/workspace/rmsdk.native.wraper/jni/RMSDK_Wrapper_JNI.cpp: In function '_jbyteArray* Java_com_rmsdk_wrapper_RMServices_getImageBuffer(JNIEnv*, _jobject*, jint, jint)':
/home/marcos/dev/workspace/rmsdk.native.wraper/jni/RMSDK_Wrapper_JNI.cpp:37: error: cannot convert 'unsigned char*' to '_jbyteArray**' in assignment
make: *** [/home/marcos/dev/workspace/rmsdk.native.wraper/obj/local/armeabi/objs/rmsdk/RMSDK_Wrapper_JNI.o] Error 1

1 个答案:

答案 0 :(得分:5)

请参阅these JNI array operations,特别是:

  • NewByteArray
  • GetArrayElements
  • ReleaseArrayElements

如果您事先知道数组的最大大小,则可以避免NewByteArray调用。

如果不经常调用,您可能会发现使用JNA更容易。