2009-08-04 29 views
1

私はJavaでオブジェクトストアを持っています。私のCプログラムは、Javaにchar配列のデータを格納します。今私は自分の店からデータを取得したいと思っています。私はchar配列を返す関数呼び出しを見つけることができません。これどうやってするの?JavaからC - JNIへのchar配列の返却

+0

あなたの質問は、まだ少し掃除する必要があります。あなたのCプログラムはJavaで何かを保存していますか?文字エンコーディングの問題をすべて解決しましたか? –

答えて

1

おそらく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 */ 
    } 
関連する問題