Как конвертировать неподписанный символ в jbyteArray - PullRequest
3 голосов
/ 12 января 2011

Как преобразовать буфер без знака в массив jbyteArray? Мне нужно получить буфер C ++ и вернуться в Java через JNI.

Это мой текущий код для этого.

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

Ty.

1 Ответ

6 голосов
/ 12 января 2011

См. эти операции массива JNI , в частности:

  • NewByteArray
  • GetArrayElements
  • ReleaseArrayElements

Если вы заранее знаете максимальный размер массива, вы можете избежать вызова NewByteArray.

Если вы называете это нечасто, вам может оказаться проще использовать JNA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...