【问题标题】:C++ invoke Java function to get Array of JavaClassObject using JNIC++ 调用 Java 函数以使用 JNI 获取 JavaClassObject 数组
【发布时间】:2020-11-11 17:41:15
【问题描述】:

我正在用虚幻引擎开发一个应用程序,所以基本编码是用 C++ 编写的,我必须从 .jar 访问一些方法

我访问了简单的 java 函数,返回:boolean、int、string(本机数据类型):

JavaMethod_GetJavaString  = JavaClassObject_Manager->GetClassMethod("GetJavaString", "()Ljava/lang/String;");

我称这个方法为:

jstring myJStr = static_cast<jstring>(JavaClassObject_Manager->CallMethod<jobject>(JavaMethod_GetJavaString));
JNIEnv* Env = AndroidApplication::GetJavaEnv();
const char* myUTFString = Env->GetStringUTFChars(myJStr, nullptr);
std::string myCStr(UTF8_TO_TCHAR(myUTFString));

但上面的代码是为了从 JAVA 获取单个字符串,我想要一个 JAVA 对象数组。当我在寻找 JAVA 和 JNI 时,我遇到了“jarray”和“jobjectarray”。但找不到任何文档或示例来获取 C++ 中的 java 对象数组

【问题讨论】:

    标签: java c++ arrays android-ndk java-native-interface


    【解决方案1】:

    字符串数组将是jobjectArray

    要从该数组中获取特定字符串,您可以使用GetObjectArrayElement,它会为您提供一个jobject,您可以将其强制转换为jstring

    然后以与您相同的方式提取字符串内容,除了您当然应该在之后调用ReleaseStringUTFChars

    最后在您的jstring 上调用DeleteLocalRef(您可能必须将其转换回jobject)。

    有关这些功能的更多详细信息,请参阅the JNI Functions documentation

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多