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

时间:2009-08-04 13:38:23

标签: java c java-native-interface

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

1 个答案:

答案 0 :(得分:1)

您需要使用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 */
    }