[发明专利]基于JNI的C++中JAVA函数调用方法有效
申请号: | 201711336832.0 | 申请日: | 2017-12-14 |
公开(公告)号: | CN107832056B | 公开(公告)日: | 2020-12-18 |
发明(设计)人: | 李波 | 申请(专利权)人: | 苏州蜗牛数字科技股份有限公司 |
主分类号: | G06F8/40 | 分类号: | G06F8/40 |
代理公司: | 北京德崇智捷知识产权代理有限公司 11467 | 代理人: | 王金双 |
地址: | 215000 江苏省*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 jni c++ java 函数 调用 方法 | ||
一种C++与JAVA函数相互调用方法,包括以下步骤:使用C++可变参数模板和模板特化,实现编译期JNI数据类型签名的字符串值字面对象,并预置JNI支持的数据类型签名,建立JNI接口;调用JAVA函数后,使用C++可变参数模板和模板特化实现C++、JNI直接的数据类型转换和生成函数签名;进行函数执行结果从JNI数据类型转换为C++数据类型,最终返回结果。采用本发明的方法,实现C++、JAVA无缝调用,并隐藏了JNI的调用过程,开发人员不必去学习JNI开发也不必去编写沉长的JNI函数调用签名也能完成C++与JAVA的交互,大大减少工作量并提高程序的可维护性和稳定性,节省人力成本。
技术领域
本发明涉及一种跨语言函数调用方法,尤其涉及基于JNI(Java NativeInterface)的C++中JAVA函数调用方法。
背景技术
在进行跨平台开发中,为了能够实现代码的高度复用,往往都会使用C++来开发核心功能,然后使用各个平台原生语言来实现核心功能与平台的交互,比如android游戏开发,核心游戏逻辑使用C++开发,平台部分使用Java开发。因为游戏是在平台之上运行的,所以游戏逻辑和平台肯定会有所交互,目前C++和JAVA主流的交互方法是使用JNI来调用JAVA函数,但是要真正的实现调用,开发人员必须清楚C++数据类型、JNI数据类型、JAVA数据类型并且还需要了解这些类型是如何对应和转换的,并且还需要清楚的知道如何编写JNI函数签名。而且编写具体交互逻辑的时候的步骤为:
步骤①.通过C++、JNI、JAVA数据类型的映射关系手动编写函数签名。
步骤②.手动编写C++、JNI、JAVA每一种数据类型的转换。
步骤③.查找函数并调用。
步骤④.手动转换函数返回结果。
以上步骤为每调用一个函数都要写一遍。随着函数数目增加,工作量和代码维护量将大幅增加,同时出错的概率也大大增加。
发明内容
为了解决现有技术存在的问题,本发明提供一种基于JNI的C++中JAVA函数调用方法。
本发明的目的通过以下技术方案来实现:
基于JNI的C++与JAVA调用方法,其包括以下步骤:
使用C++可变参数模板和模板特化,实现编译期JNI数据类型签名的字符串值字面对象,并预置JNI支持的数据类型签名,建立JNI接口;
调用JAVA函数后,使用C++可变参数模板和模板特化实现C++、JNI直接的数据类型转换和生成函数签名;
进行函数执行结果从JNI数据类型转换为C++数据类型,最终返回结果。
上述的基于JNI的C++中JAVA函数调用方法,其中:所述的实现编译期字符串字面对象的实现原理为利用C++可变参数模板的特性以及模板特化特性实现模板递归,每一层递归保存一个静态字符,最终整套递归就是一个完整的字符串字面值对象。JNI数据类型是有限的,然后通过编译期字符串字面对象预置JNI数据类型签名。以供通过C++对象映射JNI对象。本发明提供一套JNI接口,用于给开发人员调用java函数,通过C++模板实现模板递归和特化,实现JNI数据类型签名字符串字面值对象,并预置JNI支持的数据类型签名,开发人员调用JAVA方法后,使用C++模板特化和可变参数特性推导出参数对应的JNI数据类型签名字符串字面值对象,使用模板递归连接数据类型签名生成最终的函数签名。该操作是在程序编译期完成的。如果使用的数据类型不被支持,编译将不会通过。通过自动生成的函数签名调用JNI接口查找函数,找到函数后,使用可变参数模板和模板特化实现C++到JNI的数据类型转换,使用转换过后的参数进行函数调用,并自动进行函数执行结果从JNI数据类型转换为C++数据类型,最终返回结果。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州蜗牛数字科技股份有限公司,未经苏州蜗牛数字科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711336832.0/2.html,转载请声明来源钻瓜专利网。