【问题标题】:How to get a String value into C++ from Java method using JNI如何使用 JNI 从 Java 方法将字符串值转换为 C++
【发布时间】:2019-05-10 16:59:16
【问题描述】:

我的 Java 类中有一个方法,它返回一个字符串。当前方法签名 ()Ljava/lang/String; 我可以在本机调用中使用 JVM 创建类和方法 ID。 已经完成 GetStaticMethodID 等...一切都很好。

如何调用这个方法?例如: env->CallIntMethod() env->CallCharMethod() .... 哪个选项可以取回字符串?

在 C++ 中,我需要复制此 Java 方法返回的字符串值。 注意:如果需要,我可以更改 Jar 中方法的签名。或者可以添加另一种方法来包装另一个。

【问题讨论】:

    标签: c++ java-native-interface jnienv


    【解决方案1】:

    返回Java字符串的方法应该被称为

    jstring js = static_cast<jstring>(env->CallObjectMethod(jobj, mId));
    

    现在你可以使用了

    const char *cstr = env->GetStringUTFChars(js, nullptr);
    

    使用后别忘了释放字符串:

    env->ReleaseStringUTFChars(js, cstr);
    

    您可能会发现有必要释放 Java 本地引用,

    env->FreeLocalReference(js);
    

    【讨论】:

    • 非常感谢。我测试了它。还要补充一点,在使用它之前,我必须将返回值转换为 jstring。(jstring)env->CallObjectMethod(javaObjectInstance,javaMethodId);
    • 能否请您告诉我答案是否“接受”?我无法在页面中弄清楚。如果你提到一个!
    • 有一个灰色的✔,点击它会变成绿色。这就是您在 Stack Overflow 上接受答案的方式。
    猜你喜欢
    • 2012-12-28
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2021-12-05
    • 2014-02-05
    相关资源
    最近更新 更多