为了账号安全,请及时绑定邮箱和手机立即绑定

将 JNI -> jobject(基本上是映射和/或 java 文件中的映射)

将 JNI -> jobject(基本上是映射和/或 java 文件中的映射)

慕码人2483693 2022-05-12 17:09:22
我在 java 文件中有一个本地方法:-class JNITest{    public native void test(String param1, Map<String, Number> param2, Map<String, Map<String, Double>> param3)}从java生成头文件后,map在头文件方法中转换为jobject:-JNIEXPORT void JNICALL Java_com_jni_JNITest_test(JNIEnv *env,jobject self,jstring param1,jobject param2,jobject param3) { }我在 cpp 中有一个本机方法:int cpp_native(std::string param1,std::map<std::string, float>& param2,std::map<std::string, std::map<std::string, float> >& param3) { }问:- 我需要将 Jobject 转换回 std::map(cpp) 以将其传递给 cpp 本机方法,有人可以建议做同样的标准方法吗?提前致谢。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

我们在 C++/Java 集成方面做了很多工作。跨边界传递复杂数据结构的问题是您必须编组方法调用,这可能是一项非常复杂且容易出错的工作。我发现做这样的事情要容易得多:

  • 在 Java 端,使用 gson 或 jackson 将您的地图序列化为 JSON

  • 越界传递 JSON 字符串

  • 在 C++ 端将 JSON 反序列化为 std::map

我对 C++ 方面不太熟悉,但我看到这里解决了类似的问题


查看完整回答
反对 回复 2022-05-12
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

查看完整回答
反对 回复 2022-05-12
?
慕村9548890

TA贡献1884条经验 获得超4个赞

您可以使用scapix::link::java C++ JNI 库在许多 C++ 和 Java 类型之间自动转换。这是一个例子:


#include <scapix/java_api/java/lang/System.h>

#include <scapix/java_api/java/util/Locale.h>

#include <scapix/java_api/java/text/DateFormatSymbols.h>


using namespace scapix::link::java;

using namespace scapix::java_api;


void test1()

{

    // C++ objects are automatically converted to and from corresponding Java types.

    // This works for any type supported by scapix::link::java::convert() interface,

    // which supports many STL types and can be extended for your own types.


    std::string version = java::lang::System::getProperty("java.version");

    std::vector<std::string> languages = java::util::Locale::getISOLanguages();

    std::vector<std::vector<std::string>> zone_strings = java::text::DateFormatSymbols::getInstance()->getZoneStrings();

    std::map<std::string, std::string> properties = java::lang::System::getProperties();

}


查看完整回答
反对 回复 2022-05-12
  • 3 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信