[发明专利]一种跨平台的ABI兼容C++组件框架的实现方法有效
申请号: | 202010961266.8 | 申请日: | 2020-09-14 |
公开(公告)号: | CN112148283B | 公开(公告)日: | 2023-09-22 |
发明(设计)人: | 张铭雨;叶雨桐 | 申请(专利权)人: | 第六镜科技(成都)有限公司 |
主分类号: | G06F8/36 | 分类号: | G06F8/36;G06F8/41 |
代理公司: | 北京华清迪源知识产权代理有限公司 11577 | 代理人: | 杜立军 |
地址: | 610093 四川省成都市中国(四川*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 平台 abi 兼容 c++ 组件 框架 实现 方法 | ||
1.一种跨平台的ABI兼容C++组件框架的实现方法,其特征在于,包括步骤:
以泛型ABI接口类型为基础,构建底层专有ABI接口类型系统;其中,所述ABI接口类型包括纯虚函数,所述纯虚函数的参数均为基本类型;
将所述ABI接口类型系统中ABI接口类型的函数与C++程序对应实现类型中成员函数进行静态绑定;
调用C++程序对应实现类型中相应函数时,通过所述静态绑定的关系,导出所述ABI接口类型;
根据泛型ABI接口的成员函数协议,设置接口的多个成员函数,生成ABI接口类型;
采用GUID作为所述ABI接口类型的唯一标识符;
定义所述ABI接口类型的适配层;其中所述适配层是指所述ABI接口类型与C++程序对应实现类型中成员函数的对应关系;
获取所述ABI接口类型的成员函数;
利用奇异模板转换所述成员函数的指针至所述C++程序对应实现类型中成员函数的指针;
调用所述C++程序对应实现类型中相应函数,实现所属API接口类型的成员函数到所述实现类型的成员函数。
2.根据权利要求1所述的跨平台的ABI兼容C++组件框架的实现方法,其特征在于,所述ABI接口类型的适配层的定义包括步骤:
提取预先保存所述ABI接口类型信息的指针,并传递至所述ABI接口类型的成员函数;
如果出现错误,获取错误码,并生成C++异常的信息;
若没有出现错误,则将所述指针装填为所述C++程序对应实现类型并传递至所述实现类型的成员函数,构成ABI接口类型的成员函数与所述C++程序对应实现类型的成员函数的适配。
3.根据权利要求1所述的跨平台的ABI兼容C++组件框架的实现方法,其特征在于,所述GUID的生成方式包括步骤:
获取所述ABI接口类型的各成员函数的输出参数;
获取所述各输出参数的GUID;
拼接各输出参数的GUID形成数组;
计算所述数组的哈希值,并取所述哈希值的前128位作为新的GUID。
4.根据权利要求1所述的跨平台的ABI兼容C++组件框架的实现方法,其特征在于,采用GUID或所述ABI接口类型的名称相结合的方式导出所述ABI接口类型;
从GUID查询所述C++程序对应实现类型的创建函数;
通过所述创建函数创建所述ABI接口类型的实例。
5.根据权利要求4所述的跨平台的ABI兼容C++组件框架的实现方法,其特征在于,还包括引用计数管理;每创建一个实例,引用计数管理引用技术自增一;每销毁一个实例,应用技术自减一;通过引用计数归零,删除所述ABI接口类型。
6.根据权利要求2所述的跨平台的ABI兼容C++组件框架的实现方法,其特征在于,采用线程局部存储的方式对所述错误码进行存储。
7.根据权利要求4所述的跨平台的ABI兼容C++组件框架的实现方法,其特征在于,所述采用GUID或所述ABI接口类型的名称相结合的方式导出所述ABI接口类型包括步骤:
输入GUID或所述ABI接口类型的名称;
在所述GUID或所述ABI接口类型的名称的哈希值缓存中进行查询;
如果找到所述GUID或所述ABI接口类型的名称的哈希值,则创建函数并抛出C++异常,实现ABI接口类型的导出;
如果没有找到所述GUID或所述ABI接口类型的名称的哈希值,直接导出所述ABI接口类型。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于第六镜科技(成都)有限公司,未经第六镜科技(成都)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010961266.8/1.html,转载请声明来源钻瓜专利网。