c++ - 如何使用 JNI 从 Java 方法将字符串值导入 C++

标签 c++ java-native-interface jnienv

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

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

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

最佳答案

返回 Java String 的方法应该被称为

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

现在你可以使用

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

不要忘记在使用后释放字符串:

env->ReleaseStringUTFChars(js, cstr);

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

env->FreeLocalReference(js);

关于c++ - 如何使用 JNI 从 Java 方法将字符串值导入 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694735/

相关文章:

android - JNI : Catch NewStringUTF Inner-Exception

c++ - 如何确定另一个结构中的结构数组的长度

java - Android JNI 和 NewGlobalRef

java - 如何释放jbyteArray?

c - .c语言中的jstring比较该怎么办

java - 在另一个 JNI 函数中使用时 Oop 被破坏

java - 无法使用 JNI 使用外部 Java 类

c++ - SDL fscanf 函数问题

指向函数的 C++ 指针导致段错误

c++ - 为什么需要重新声明接口(interface)?