转换JNI->;jobject(基本上是java文件中的映射和/或映射)到std::map(c+;+;)

转换JNI->;jobject(基本上是java文件中的映射和/或映射)到std::map(c+;+;),java,c++,java-native-interface,jnienv,jniwrapper,Java,C++,Java Native Interface,Jnienv,Jniwrapper,我在java文件中有一个本机方法:- class JNITest{ public native void test(String param1, Map<String, Number> param2, Map<String, Map<String, Double>> param3) } 我在cpp中有一个本机方法: int cpp_native( std::string param1, std::map<std::string, float&g

我在java文件中有一个本机方法:-

class JNITest{
    public native void test(String param1, Map<String, Number> param2, Map<String, Map<String, Double>> param3)
}
我在cpp中有一个本机方法:

int cpp_native(
std::string param1,
std::map<std::string, float>& param2,
std::map<std::string, std::map<std::string, float> >& param3) { }
int cpp_native(
std::string param1,
标准::映射和参数2,
std::map¶m3){}
问:我需要将Jobject转换回std::map(cpp)以将其传递给cpp本机方法,是否有人可以建议执行相同操作的标准方法?
提前谢谢。

这需要一点努力。请看这里:

另外,在这里查看与将映射传递到本机代码相关的示例


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

  • 在Java方面,使用gson或jackson将映射序列化为JSON
  • 通过边界传递JSON字符串
  • 在C++方面将JSON反序列化为STD::MAP
<>我不熟悉C++方面,但我也看到类似的问题被解决了

< p>你可以使用C++ JNI库来自动转换很多C++和java类型之间的关系。以下是一份:

#包括
#包括
#包括
使用名称空间scapix::link::java;
使用名称空间scapix::java_api;
void test1()
{
//C++对象自动转换为相应的java类型。
//这适用于scapix::link::java::convert()接口支持的任何类型,
//它支持许多STL类型,并且可以为您自己的类型进行扩展。
std::string version=java::lang::System::getProperty(“java.version”);
std::vector languages=java::util::Locale::GetIsolagues();
std::vector zone_strings=java::text::DateFormatSymbols::getInstance()->getZoneStrings();
std::map properties=java::lang::System::getProperties();
}

您可以尝试使用JavaCPP从Java访问std::map:如果您感兴趣,请告诉我,我可以提供一些示例代码作为答案。
int cpp_native(
std::string param1,
std::map<std::string, float>& param2,
std::map<std::string, std::map<std::string, float> >& param3) { }