将JNI-> jobject(基本上是Java文件中的map和/或map映射)转换为std :: map(c)

我在Java文件中有一个本地方法:

 

 

class JNITest{
    public native void test(String param1, Map<String, Number> param2, Map<String, Map<String, Double>> param3)
}

从Java生成头文件后,映射将通过头文件方法转换为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本机方法,有人可以建议使用标准方法进行相同操作吗?
提前致谢.

最佳答案

我们已经完成了C / Java集成的大量工作.跨边界传递复杂的数据结构的问题是,您必须整理方法调用,这可能是非常复杂且容易出错的工作.我发现做这样的事情要容易得多:

 

>在Java方面,使用gson或jackson将地图序列化为JSON
>跨边界传递JSON字符串
>在C端将JSON反序列化为std :: map

我对C端不太熟悉,但是我看到类似的问题正在解决here

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值