[发明专利]一种类托管代码调用C/C++风格函数的复杂结构的参数设计方法有效
申请号: | 201610257469.2 | 申请日: | 2016-04-22 |
公开(公告)号: | CN105786529B | 公开(公告)日: | 2018-11-20 |
发明(设计)人: | 陆成刚;徐利光;王定江 | 申请(专利权)人: | 浙江工业大学 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F8/41 |
代理公司: | 杭州斯可睿专利事务所有限公司 33241 | 代理人: | 王利强 |
地址: | 310014 浙江省*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 种类 托管 代码 调用 c++ 风格 函数 复杂 结构 参数 设计 方法 | ||
一种类托管代码调用C/C++风格函数的复杂结构的参数设计方法,1)在调用端中建立JSON字符串生成模块,对自定义的结构变量生成对应的JSON消息文本字符串;2)取出字符串中的字符组成数组,末尾以“\0”作结束;3)传入接口函数;4)在被调用端将字符数组转成字符串;5)建立JSON字符串解析模块,生成对应的调用端的自定义的结构变量;6)向被调用端输出信息时,将输出信息生成JSON字符串;7)取出字符串中的字符组成数组,末尾以“\0”作结束;8)将数组地址赋值给输出参数指针。本发明提供了一种简化接口复杂度、代码维护优良的类托管代码调用C/C++风格函数的复杂结构的参数设计方法。
技术领域
本发明属于托管代码领域,涉及一种类托管代码调用C/C++风格函数的复杂结构的参数设计方法。
背景技术
所谓托管代码是微软的术语,源于.NET专业程序开发平台,例如C#就是这样一种软件开发语言,其基于CLR(common language runtime)库运行程序;JAVA也是类似托管的一种开发语言平台,其基于JVM(Java Virtual Machine)虚拟机运行程序。托管语言开发的程序有自动内存垃圾回收机制,运行速度相对比C/C++程序慢,但开发速度快,运行时较安全可靠。在C#/JAVA开发中常常需要调用C/C++实现的函数库,这样托管代码的优势和C/C++语言的优势可以无缝结合了。C#调用C/C++函数使用的方法称为P/Invoke,而JAVA采用JNI方法调用C/C++函数。
C#/JAVA和C/C++之间的基本数据类型有着显著的差异,而且C/C++具有灵活的自定义结构;C#也有自定义的结构类型,但和C/C++显然不一样,JAVA是使用类来定义结构的,但JAVA的类的形式和C++的类是不一样的。所有这些差异导致在C#/JAVA调用C/C++函数时常常使用与C#/JAVA内置的基本数据类型一致的数据规格,例如使用整型、浮点型变量。如果C/C++的函数参数是字符型,那么一定要使用宽字符,因为C#中的char型默认是双字节的。
C/C++、C#、和JAVA数据类型的不完全比较(表格中数字表示字节数),参照表1:
表1
表1显示了各开发语言在基本数据类型的字节长度的差异,尤其虽然各自有自定义的数据结构的功能,但结构在形式上是不一样的。
通过上面的分析,我们知道在C/C++中实现复杂的数据结构的输入输出时,这样的函数很难直接被C#/JAVA调用,必须要将参数转化为仅仅使用基本类型的形式,但这样的设计往往增加了接口函数的数目、复杂度,不利于对代码作优良的维护,以及对数据设计概念的传递和保持。
发明内容
为了克服已有C/C++中实现复杂的数据结构的输入输出时很难直接被C#/JAVA调用的不足,本发明提供了一种简化接口复杂度、代码维护优良的类托管代码调用C/C++风格函数的复杂结构的参数设计方法。
本发明解决其技术问题所采用的技术方案是:
一种类托管代码调用C/C++风格函数的复杂结构的参数设计方法,C/C++端作为被调用端,C#/Java端作为调用端,所述参数设计方法包括如下步骤:
1)在调用端中建立JSON字符串生成模块,对自定义的结构变量生成对应的JSON消息文本字符串;
2)取出字符串中的字符组成数组,末尾以“\0”作结束;
3)传入接口函数;
4)在被调用端将字符数组转成字符串;
5)建立JSON字符串解析模块,生成对应的调用端的自定义的结构变量;
6)向被调用端输出信息时,将输出信息生成JSON字符串;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江工业大学,未经浙江工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610257469.2/2.html,转载请声明来源钻瓜专利网。