CN105786529B - 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法 - Google Patents

一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法 Download PDF

Info

Publication number
CN105786529B
CN105786529B CN201610257469.2A CN201610257469A CN105786529B CN 105786529 B CN105786529 B CN 105786529B CN 201610257469 A CN201610257469 A CN 201610257469A CN 105786529 B CN105786529 B CN 105786529B
Authority
CN
China
Prior art keywords
character string
json
character
text
labyrinth
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610257469.2A
Other languages
English (en)
Other versions
CN105786529A (zh
Inventor
陆成刚
徐利光
王定江
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Markov Technology Co ltd
Original Assignee
Zhejiang University of Technology ZJUT
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang University of Technology ZJUT filed Critical Zhejiang University of Technology ZJUT
Priority to CN201610257469.2A priority Critical patent/CN105786529B/zh
Publication of CN105786529A publication Critical patent/CN105786529A/zh
Application granted granted Critical
Publication of CN105786529B publication Critical patent/CN105786529B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Abstract

一种类托管代码调用C/C++风格函数的复杂结构的参数设计方法,1)在调用端中建立JSON字符串生成模块,对自定义的结构变量生成对应的JSON消息文本字符串;2)取出字符串中的字符组成数组,末尾以“\0”作结束;3)传入接口函数;4)在被调用端将字符数组转成字符串;5)建立JSON字符串解析模块,生成对应的调用端的自定义的结构变量;6)向被调用端输出信息时,将输出信息生成JSON字符串;7)取出字符串中的字符组成数组,末尾以“\0”作结束;8)将数组地址赋值给输出参数指针。本发明提供了一种简化接口复杂度、代码维护优良的类托管代码调用C/C++风格函数的复杂结构的参数设计方法。

Description

一种类托管代码调用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字符串;
7)取出字符串中的字符组成数组,末尾以“\0”作结束;
8)将数组地址赋值给输出参数指针。
进一步,所述步骤1)中在结构变量转成JSON消息时,以及所述步骤5)中JSON消息解析生成C#/JAVA的自定义结构变量时;结构变量中每一个分量的变量名作“名称”,分量的取值作值;如果分量类型也是一个子结构,那么对该结构预先作好“名称/值”配对的集合,然后将该子结构变量定义为一个新的名称,该子结构的“名称/值”对集合就是它的值。
本发明的技术构思为:基于宽字符数组开发了一套适用于任意复杂度结构的参数形式化设计方法,而且支持在C/C++和C#/JAVA之间无缝传递。
依赖于JSON这种数据交换的格式协议。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。JSON建构于两种结构:“名称/值”对的集合、值的有序列表。“名称/值”之间使用“:”分离,值之间使用“,”分离。
本发明的有益效果主要表现在:简化接口复杂度、代码可维护性较好。
附图说明
图1是支持任意复杂结构的JSON化参数设计原理图。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1,一种类托管代码调用C/C++风格函数的复杂结构的参数设计方法,C/C++端作为被调用端,C#/Java端作为调用端,所述参数设计方法包括如下步骤:
1)在调用端中建立JSON字符串生成模块,对自定义的结构变量生成对应的JSON消息文本字符串;
2)取出字符串中的字符组成数组,末尾以“\0”作结束;
3)传入接口函数;
4)在被调用端将字符数组转成字符串;
5)建立JSON字符串解析模块,生成对应的调用端的自定义的结构变量;
6)向被调用端输出信息时,将输出信息生成JSON字符串;
7)取出字符串中的字符组成数组,末尾以“\0”作结束;
8)将数组地址赋值给输出参数指针。
本实施例中,调用端需要给被调用端输入信息,被调用端需要输出一些信息给调用端。
本实施例中,在C/C++中的接口函数原型为
Void InterfaceFunc(wchar*in_message,int inlen,wchar*out_message,intoutlen);
而在C#/JAVA的接口设计为
Void InterfaceFunc(char*in_message,int inlen,char*out_message,intoutlen);
即使用JAVA/C#的双字节Char型和C/C++中的宽字符wchar对接,inlen/outlen是输入输出字符串的长度(字符的数目),字符数据取自于字符串,末尾为“\0”作结束。
实现步骤,以实现输入参数为例:
1)在C#/Java中建立JSON字符串生成模块,对自定义的结构变量生成对应的JSON消息文本字符串;
2)取出字符串中的字符组成数组,末尾以“\0”作结束;
3)传入接口函数;
4)在C/C++端将字符数组转成字符串;
5)建立JSON字符串解析模块,生成对应的C#/JAVA的自定义的结构变量。
6)向C#/JAVA端输出信息时,将输出信息生成JSON字符串;
7)取出字符串中的字符组成数组,末尾以“\0”作结束;
8)将数组地址赋值给输出参数指针。
在结构变量转成JSON消息时,结构变量中每一个分量的变量名作“名称”,分量的取值作值;如果分量类型也是一个子结构,那么对该结构预先作好“名称/值”配对的集合,然后将该子结构变量定义为一个新的名称,该子结构的“名称/值”对集合就是它的值。在JSON消息解析生成C#/JAVA的自定义结构变量时对结构内嵌的子结构作相应的处理。
对于参数输出的情况类似,只是在C/C++端进行JSON消息的生成,而在C#/JAVA端实现对JSON消息的解析。
实例:对一条数字地图的路径的数据结构的模拟,
在C/C++中的表示:
在C#/JAVA端解析JSON消息包时自然可以通过through_address的取值数目知道路径途径点的数目。

Claims (2)

1.一种类托管代码调用C/C++风格函数的复杂结构的参数设计方法,其特征在于:C/C++端作为被调用端,C#/Java端作为调用端,所述参数设计方法包括如下步骤:
1)在调用端中建立JSON字符串生成模块,对自定义的结构变量生成对应的JSON消息文本字符串;
2)取出JSON消息文本字符串中的字符组成数组,末尾以“\0”作结束;
3)传入接口函数;
4)在被调用端将字符数组转成字符串;
5)在被调用端建立JSON字符串解析模块,生成对应的调用端的自定义的结构变量;
6)向被调用端输出信息时,将输出信息生成JSON消息文本字符串;
7)取出JSON消息文本字符串中的字符组成数组,末尾以“\0”作结束;
8)将数组地址赋值给输出参数指针。
2.如权利要求1所述的一种类托管代码调用C/C++风格函数的复杂结构的参数设计方法,其特征在于:所述步骤1)中在结构变量转成JSON消息时,以及所述步骤5)中JSON消息解析生成C#/JAVA的自定义结构变量时;结构变量中每一个分量的变量名作“名称”,分量的取值作值;如果分量类型也是一个子结构,那么对该结构预先作好“名称/值”配对的集合,然后将该子结构变量定义为一个新的名称,该子结构的“名称/值”对集合就是它的值。
CN201610257469.2A 2016-04-22 2016-04-22 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法 Active CN105786529B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610257469.2A CN105786529B (zh) 2016-04-22 2016-04-22 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610257469.2A CN105786529B (zh) 2016-04-22 2016-04-22 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法

Publications (2)

Publication Number Publication Date
CN105786529A CN105786529A (zh) 2016-07-20
CN105786529B true CN105786529B (zh) 2018-11-20

Family

ID=56398394

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610257469.2A Active CN105786529B (zh) 2016-04-22 2016-04-22 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法

Country Status (1)

Country Link
CN (1) CN105786529B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111752566B (zh) * 2019-03-28 2024-03-22 上海视九信息科技有限公司 编译型语言环境中函数表达式的解析方法及装置、存储介质、终端
CN111045685A (zh) * 2019-11-05 2020-04-21 贝壳技术有限公司 代码转换方法、装置、存储介质及电子设备
CN112214212B (zh) * 2020-10-10 2024-04-02 江西洪都航空工业集团有限责任公司 一种根据json格式数据生成c#语言源代码的方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1519716A (zh) * 2003-01-22 2004-08-11 北京科泰世纪科技有限公司 基于构件定义语言自动生成c++程序的方法
CN103399934A (zh) * 2013-08-09 2013-11-20 神州数码(中国)有限公司 一种表单数据的传输与存储方法
CN105279033A (zh) * 2014-07-22 2016-01-27 Tcl集团股份有限公司 Android平台下C++和Java通信的方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6751790B2 (en) * 2001-05-09 2004-06-15 Sun Microsystems, Inc. Frameworks for efficient representation of string objects in Java programming environments

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1519716A (zh) * 2003-01-22 2004-08-11 北京科泰世纪科技有限公司 基于构件定义语言自动生成c++程序的方法
CN103399934A (zh) * 2013-08-09 2013-11-20 神州数码(中国)有限公司 一种表单数据的传输与存储方法
CN105279033A (zh) * 2014-07-22 2016-01-27 Tcl集团股份有限公司 Android平台下C++和Java通信的方法及系统

Also Published As

Publication number Publication date
CN105786529A (zh) 2016-07-20

Similar Documents

Publication Publication Date Title
CN106648945B (zh) 一种接口数据测试方法、装置及电子设备
CN106970820B (zh) 代码存储方法及代码存储装置
CN104484216A (zh) 服务接口文档和在线测试工具生成方法、装置
CN105511843A (zh) 一种生成应用程序界面的方法和装置
CN105786529B (zh) 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法
CN102023856A (zh) 根据用户的需求格式化输出及操作伺服端业务数据的方法
CN110297999A (zh) 一种网页模板生成方法及装置、网页加载方法及前端服务器和网站服务器
CN103236959A (zh) 用于测试业务处理模块的测试系统和方法
CN102741811A (zh) 改善基于模板的JavaScript小部件的性能
US9367432B2 (en) Testing system
CN108717437A (zh) 搜索结果展示方法、装置及存储介质
CN110287429A (zh) 数据解析方法、装置、设备及存储介质
CN108628604A (zh) Soa请求报文的参数值生成方法及系统
CN108153745B (zh) 一种应用数据调用方法及应用开发系统
CN105793842B (zh) 序列化消息之间的转换方法和装置
CN110941655A (zh) 一种数据格式转换方法及装置
CN105279032B (zh) 一种同步接口报文与javaBean的方法及装置
CN108427580A (zh) 配置对命名重复的检测方法、存储介质和智能设备
CN105005496B (zh) 一种跨语言转换网络数据包定义文件的处理系统及方法
CN110532233A (zh) 一种epub文件生成方法和系统
CN112947900A (zh) web应用开发方法、装置、服务器及开发终端
CN108427664A (zh) 一种文档解析方法和装置
WO2017084515A1 (zh) 数据码流发送方法及装置
CN107451167A (zh) 站内点击位的点击数据获取方法和系统
CN113010220A (zh) 一种组件式的数据处理方法和系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20220128

Address after: 310000 5-1006, No. 501, No. 2 street, Baiyang street, Qiantang new area, Hangzhou, Zhejiang Province

Patentee after: Hangzhou Markov Technology Co.,Ltd.

Address before: The city Zhaohui six districts Chao Wang Road Hangzhou City, Zhejiang province 310014 18

Patentee before: ZHEJIANG University OF TECHNOLOGY

TR01 Transfer of patent right