将char数组从java返回到C – JNI

我有一个Java对象存储库。 我的C程序在java中存储数据(以char数组的forms)。 现在我希望从我的商店中检索数据。 我找不到任何返回char数组的函数调用。 我怎样才能做到这一点?

您需要使用JNI提供的各种API之一,可能是GetCharArrayElements()。

下面是一个示例,取自工作代码,该代码从Java检索字节数组到C(代码是由Java调用的函数,但机制是相同的)。

JNIEXPORT void JNICALL Java_xxx_jniEnqueue(JNIEnv *jep,jobject thsObj, jlong handle, jbyteArray jvaKey, jint jvaKeyOfs, jint jvaKeyLen, jbyteArray jvaData, jint jvaDtaOfs, jint jvaDtaLen) { jbyte *jniKey,*jniData; jthrowable escObj; jniKey=(*jep)->GetByteArrayElements(jep,jvaKey,0); jniData=(*jep)->GetByteArrayElements(jep,jvaData,0); ... memcpy(odp->enqpfx->Msg,jniKey+jvaKeyOfs,(vuns)jvaKeyLen); /* key badly named Msg */ ... // enqueue data using key if(/* enqueue failed */) { (*jep)->ReleaseByteArrayElements(jep,jvaKey ,jniKey ,JNI_ABORT); /* abort to not copy back */ (*jep)->ReleaseByteArrayElements(jep,jvaData,jniData,JNI_ABORT); /* abort to not copy back */ throwEscapeObject(jep,escObj); return; } (*jep)->ReleaseByteArrayElements(jep,jvaKey ,jniKey ,JNI_ABORT); /* abort to not copy back */ (*jep)->ReleaseByteArrayElements(jep,jvaData,jniData,JNI_ABORT); /* abort to not copy back */ }