亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 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個贊

這將需要一點點掙扎??纯催@里:

http://jnicookbook.owsiak.org/recipe-No-020/

另外,請在此處查看與將 Map 傳遞到本機代碼相關的示例

https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo037 https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo038


查看完整回答
反對 回復 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 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號