如何将unsigned char转换为jbyteArray

Mar*_*los 3 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;
};
Run Code Online (Sandbox Code Playgroud)

编译时出现以下错误.

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
Run Code Online (Sandbox Code Playgroud)

TY.

And*_*mas 6

请参阅这些JNI阵列操作,尤其是:

  • NewByteArray
  • GetArrayElements
  • ReleaseArrayElements

如果您事先知道阵列的最大大小,则可以避免NewByteArray调用.

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