如何使用 JNI 从 Java 方法将字符串值导入 C++
How to get a String value into C++ from Java method using JNI
我的 Java class 中有一个方法 returns 一个字符串。当前方法签名 ()Ljava/lang/String;
我可以在本机调用中使用 JVM 创建 class 和方法 ID。
做过GetStaticMethodID等...都很好
如何调用这个方法?例如:env->CallIntMethod() env->CallCharMethod() ....哪个选项可以返回字符串?
在 C++ 中,我需要复制这个 Java 方法返回的字符串值。
注意:如果需要,我可以更改 Jar 中方法的签名。或者可以添加另一个方法来包装另一个。
returns 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);
我的 Java class 中有一个方法 returns 一个字符串。当前方法签名 ()Ljava/lang/String; 我可以在本机调用中使用 JVM 创建 class 和方法 ID。 做过GetStaticMethodID等...都很好
如何调用这个方法?例如:env->CallIntMethod() env->CallCharMethod() ....哪个选项可以返回字符串?
在 C++ 中,我需要复制这个 Java 方法返回的字符串值。 注意:如果需要,我可以更改 Jar 中方法的签名。或者可以添加另一个方法来包装另一个。
returns 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);