[發(fā)明專利]基于JNI的C++中JAVA函數(shù)調(diào)用方法有效
| 申請(qǐng)?zhí)枺?/td> | 201711336832.0 | 申請(qǐng)日: | 2017-12-14 |
| 公開(公告)號(hào): | CN107832056B | 公開(公告)日: | 2020-12-18 |
| 發(fā)明(設(shè)計(jì))人: | 李波 | 申請(qǐng)(專利權(quán))人: | 蘇州蝸牛數(shù)字科技股份有限公司 |
| 主分類號(hào): | G06F8/40 | 分類號(hào): | G06F8/40 |
| 代理公司: | 北京德崇智捷知識(shí)產(chǎn)權(quán)代理有限公司 11467 | 代理人: | 王金雙 |
| 地址: | 215000 江蘇省*** | 國省代碼: | 江蘇;32 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 jni c++ java 函數(shù) 調(diào)用 方法 | ||
一種C++與JAVA函數(shù)相互調(diào)用方法,包括以下步驟:使用C++可變參數(shù)模板和模板特化,實(shí)現(xiàn)編譯期JNI數(shù)據(jù)類型簽名的字符串值字面對(duì)象,并預(yù)置JNI支持的數(shù)據(jù)類型簽名,建立JNI接口;調(diào)用JAVA函數(shù)后,使用C++可變參數(shù)模板和模板特化實(shí)現(xiàn)C++、JNI直接的數(shù)據(jù)類型轉(zhuǎn)換和生成函數(shù)簽名;進(jìn)行函數(shù)執(zhí)行結(jié)果從JNI數(shù)據(jù)類型轉(zhuǎn)換為C++數(shù)據(jù)類型,最終返回結(jié)果。采用本發(fā)明的方法,實(shí)現(xiàn)C++、JAVA無縫調(diào)用,并隱藏了JNI的調(diào)用過程,開發(fā)人員不必去學(xué)習(xí)JNI開發(fā)也不必去編寫沉長的JNI函數(shù)調(diào)用簽名也能完成C++與JAVA的交互,大大減少工作量并提高程序的可維護(hù)性和穩(wěn)定性,節(jié)省人力成本。
技術(shù)領(lǐng)域
本發(fā)明涉及一種跨語言函數(shù)調(diào)用方法,尤其涉及基于JNI(Java NativeInterface)的C++中JAVA函數(shù)調(diào)用方法。
背景技術(shù)
在進(jìn)行跨平臺(tái)開發(fā)中,為了能夠?qū)崿F(xiàn)代碼的高度復(fù)用,往往都會(huì)使用C++來開發(fā)核心功能,然后使用各個(gè)平臺(tái)原生語言來實(shí)現(xiàn)核心功能與平臺(tái)的交互,比如android游戲開發(fā),核心游戲邏輯使用C++開發(fā),平臺(tái)部分使用Java開發(fā)。因?yàn)橛螒蚴窃谄脚_(tái)之上運(yùn)行的,所以游戲邏輯和平臺(tái)肯定會(huì)有所交互,目前C++和JAVA主流的交互方法是使用JNI來調(diào)用JAVA函數(shù),但是要真正的實(shí)現(xiàn)調(diào)用,開發(fā)人員必須清楚C++數(shù)據(jù)類型、JNI數(shù)據(jù)類型、JAVA數(shù)據(jù)類型并且還需要了解這些類型是如何對(duì)應(yīng)和轉(zhuǎn)換的,并且還需要清楚的知道如何編寫JNI函數(shù)簽名。而且編寫具體交互邏輯的時(shí)候的步驟為:
步驟①.通過C++、JNI、JAVA數(shù)據(jù)類型的映射關(guān)系手動(dòng)編寫函數(shù)簽名。
步驟②.手動(dòng)編寫C++、JNI、JAVA每一種數(shù)據(jù)類型的轉(zhuǎn)換。
步驟③.查找函數(shù)并調(diào)用。
步驟④.手動(dòng)轉(zhuǎn)換函數(shù)返回結(jié)果。
以上步驟為每調(diào)用一個(gè)函數(shù)都要寫一遍。隨著函數(shù)數(shù)目增加,工作量和代碼維護(hù)量將大幅增加,同時(shí)出錯(cuò)的概率也大大增加。
發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)存在的問題,本發(fā)明提供一種基于JNI的C++中JAVA函數(shù)調(diào)用方法。
本發(fā)明的目的通過以下技術(shù)方案來實(shí)現(xiàn):
基于JNI的C++與JAVA調(diào)用方法,其包括以下步驟:
使用C++可變參數(shù)模板和模板特化,實(shí)現(xiàn)編譯期JNI數(shù)據(jù)類型簽名的字符串值字面對(duì)象,并預(yù)置JNI支持的數(shù)據(jù)類型簽名,建立JNI接口;
調(diào)用JAVA函數(shù)后,使用C++可變參數(shù)模板和模板特化實(shí)現(xiàn)C++、JNI直接的數(shù)據(jù)類型轉(zhuǎn)換和生成函數(shù)簽名;
進(jìn)行函數(shù)執(zhí)行結(jié)果從JNI數(shù)據(jù)類型轉(zhuǎn)換為C++數(shù)據(jù)類型,最終返回結(jié)果。
上述的基于JNI的C++中JAVA函數(shù)調(diào)用方法,其中:所述的實(shí)現(xiàn)編譯期字符串字面對(duì)象的實(shí)現(xiàn)原理為利用C++可變參數(shù)模板的特性以及模板特化特性實(shí)現(xiàn)模板遞歸,每一層遞歸保存一個(gè)靜態(tài)字符,最終整套遞歸就是一個(gè)完整的字符串字面值對(duì)象。JNI數(shù)據(jù)類型是有限的,然后通過編譯期字符串字面對(duì)象預(yù)置JNI數(shù)據(jù)類型簽名。以供通過C++對(duì)象映射JNI對(duì)象。本發(fā)明提供一套JNI接口,用于給開發(fā)人員調(diào)用java函數(shù),通過C++模板實(shí)現(xiàn)模板遞歸和特化,實(shí)現(xiàn)JNI數(shù)據(jù)類型簽名字符串字面值對(duì)象,并預(yù)置JNI支持的數(shù)據(jù)類型簽名,開發(fā)人員調(diào)用JAVA方法后,使用C++模板特化和可變參數(shù)特性推導(dǎo)出參數(shù)對(duì)應(yīng)的JNI數(shù)據(jù)類型簽名字符串字面值對(duì)象,使用模板遞歸連接數(shù)據(jù)類型簽名生成最終的函數(shù)簽名。該操作是在程序編譯期完成的。如果使用的數(shù)據(jù)類型不被支持,編譯將不會(huì)通過。通過自動(dòng)生成的函數(shù)簽名調(diào)用JNI接口查找函數(shù),找到函數(shù)后,使用可變參數(shù)模板和模板特化實(shí)現(xiàn)C++到JNI的數(shù)據(jù)類型轉(zhuǎn)換,使用轉(zhuǎn)換過后的參數(shù)進(jìn)行函數(shù)調(diào)用,并自動(dòng)進(jìn)行函數(shù)執(zhí)行結(jié)果從JNI數(shù)據(jù)類型轉(zhuǎn)換為C++數(shù)據(jù)類型,最終返回結(jié)果。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于蘇州蝸牛數(shù)字科技股份有限公司,未經(jīng)蘇州蝸牛數(shù)字科技股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201711336832.0/2.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 一種JNI層的算法進(jìn)行多實(shí)例調(diào)用的封裝方法和系統(tǒng)
- 在第二系統(tǒng)中訪問用于第一系統(tǒng)的第三方庫的方法及系統(tǒng)
- 一種智能終端JNI數(shù)據(jù)跟蹤方法及系統(tǒng)
- 一種加固安卓安裝包的動(dòng)態(tài)鏈接庫SO文件的方法和裝置
- 事件處理方法及裝置
- 一種Java應(yīng)用與非JNI規(guī)范二進(jìn)制文件相互調(diào)用的方法
- 基于JNI的C++中JAVA函數(shù)調(diào)用方法
- 一種基于Java的集群功能測(cè)試方法
- 一種Java本地接口一致性檢查方法及系統(tǒng)、存儲(chǔ)介質(zhì)及終端
- 一種Android native調(diào)用Java API的實(shí)現(xiàn)方法
- 一種跨操作系統(tǒng)平臺(tái)的機(jī)群系統(tǒng)監(jiān)控和管理方法
- 由C/C++生成JavaWeb服務(wù)的方法及裝置
- 代碼轉(zhuǎn)換方法與裝置
- 一種WPF和C++的交互方法
- 一種在C++程序中實(shí)現(xiàn)反射的方法、存儲(chǔ)介質(zhì)及計(jì)算設(shè)備
- 用于生成C/C++庫與解釋語言之間的綁定的方法,并且執(zhí)行所述方法以轉(zhuǎn)換三維(3D)模型
- 基于模塊定義圖的無人機(jī)飛行控制系統(tǒng)的C++代碼生成方法
- 基于銀河銳華操作系統(tǒng)的C++適配層的裝置
- 一種C++模塊接口的調(diào)用方法及裝置
- 在虛擬機(jī)中執(zhí)行C++任務(wù)的方法、裝置、電子設(shè)備及介質(zhì)
- 基于支持類的標(biāo)識(shí)來下載Java應(yīng)用的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品
- 啟動(dòng)JAVA應(yīng)用的方法及裝置
- Java虛擬機(jī)的管理方法、監(jiān)控系統(tǒng)和監(jiān)控代理模塊
- 一種運(yùn)行Java程序的方法和裝置
- 一種保護(hù)java程序的方法
- Java卡的Java代碼補(bǔ)丁方法
- 一種基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法
- 一種支持JAVA卡補(bǔ)丁函數(shù)的智能卡
- 一種改進(jìn)的Java卡初始化方法和Java卡
- JavaEE平臺(tái)構(gòu)建方法、JavaEE平臺(tái)及云端系統(tǒng)





