如何使用JNI从Java方法将字符串值转换为C ++

时间:2018-12-09 17:16:46

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

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

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

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

1 个答案:

答案 0 :(得分:4)

返回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);