如何將unsigned char緩衝區轉換爲jbyteArray?我需要一個C++緩衝區並通過JNI返回到Java。如何將unsigned char轉換爲jbyteArray
這是我現在的代碼來做到這一點。
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。
jbyteArray必須由JVM創建,不能返回普通的C內存位置。這會使JVM崩潰。您還應該使用幫助器方法來設置字節數組的值。 – 2011-01-12 20:41:15