转换JNI->;jobject(基本上是java文件中的映射和/或映射)到std::map(c+;+;)
我在java文件中有一个本机方法:-转换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
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字符串
#包括
#包括
#包括
使用名称空间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) { }