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

标签 java c java-native-interface

我有一个 Java 对象存储。我的 C 程序在 java 中存储数据(以 char 数组的形式)。现在我想从我的商店中检索数据。我找不到任何返回 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 */
    }

关于java - 将 char 数组从 java 返回到 C - JNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1227582/

相关文章:

c# - 子类型和协变返回类型

java - 依赖于使用 Ivy 的gradle项目

c - C 中的 gets() 函数

C 语言的中心差分近似

python - 导入错误 : dynamic module does not define init function (initfizzbuzz)

android - 在 Android 应用程序中加载 native 库时出错

android - 如何在 android studio 项目中添加 JNI 库?

java - 如何让 Java 应用程序接受 WS-Security 证书

java - 编码 JavaScript

c - 有没有办法从字符串值获取实际类型?