1
私はJavaでオブジェクトストアを持っています。私のCプログラムは、Javaにchar配列のデータを格納します。今私は自分の店からデータを取得したいと思っています。私はchar配列を返す関数呼び出しを見つけることができません。これどうやってするの?JavaからC - JNIへのchar配列の返却
私はJavaでオブジェクトストアを持っています。私のCプログラムは、Javaにchar配列のデータを格納します。今私は自分の店からデータを取得したいと思っています。私はchar配列を返す関数呼び出しを見つけることができません。これどうやってするの?JavaからC - JNIへのchar配列の返却
おそらくGetCharArrayElements()のようなJNIが提供するさまざまなAPIのいずれかを使用する必要があります。
以下は、バイト配列を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 */
}
あなたの質問は、まだ少し掃除する必要があります。あなたのCプログラムはJavaで何かを保存していますか?文字エンコーディングの問題をすべて解決しましたか? –