VC编程之Delphi和VC混合编程总结
小标 2018-08-28 来源 : 阅读 1154 评论 0

摘要:本文主要向大家介绍了VC编程之Delphi和VC混合编程总结,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之Delphi和VC混合编程总结,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。


 项目开发到了最后阶段,内核基本成型,Demo开发最终提上日程。
为了尽快完成Demo开发,毕竟Demo只是为了演示,所以决定使用Delphi来完成,因为做界面Delphi的效率是相当高的。而我们的内核引擎是使用C++开发,VC编译,这就涉及到了Delphi和VC的混合编程,这里将这几天来的经验总结共享出来,需要的时候可以随时查看。
目前的程序结构是这样的,内核使用dll封装为SDK,交付兄弟部门或者其他公司做二次开发,Demo采用Delphi主调内核,并实现结果呈现。
首先,在接口一层,要保证Delphi能够和VC进行数据交互,所以需要对应相关的数据类型。同时这里不推荐在接口函数层使用复杂数据类型,因为如果参数和返回值过于复杂,是不能简单通过基本类型来进行传递的,这样编译器内部就会进行编码,以完成复杂数据类型的传递。但是不同的语言,甚至不同的编译器的内部实现不同,很容易导致复杂数据类型数据传递失败,而产生无效传递的情况,切记切记。
基本类型对照表如下:
VC --------------------- Delphi
int                               Integerunsigned int              Cardinalchar                           Bytewchar_t                     WideCharint*                             PIntegerunsigned int*            PCardinalchar                           PBytewchar_t                     PWideChar等
在数据类型对应的情况下,才能保证类型能够正确传递
其次,接口函数调用规范的统一
由于函数调用过程中函数参数要通过堆栈进行传递,而参数在堆栈中所占空间的释放问题由谁进行,直接导致函数调用规范的提出,这就是我们知道的stdcal,cdcel,pascal,fastcal等调用规范,为了保证参数的正确传递和结果的正确获取,需要在两种语言中统一调用规范。
这里使用stdcal,没有什么特殊的理由来选择这个,目的只有一个,那就是统一,以保证参数传递正确
最后,Delphi中声明VC动态链接库的导出函数
格式举例:
原型:const wchar_t* __stdcall testW(const wchar_t* waveFile, const wchar_t* waveFmt, const wchar_t* grammarList, const wchar_t* params, int *recogStatus, int *result);
function test(waveFile:PWideChar;                          const wav_Fmt: PWideChar;                          const grammarList:PWideChar;                          const params:PWideChar;                          recogStatus:PInteger;                          func_result:PInteger): PWideChar;stdcall;                                                 external “qisr.dll” name ‘testW‘;
简单解释一些函数声明的含义:function 用于定义函数external 关键字用于定义导出该函数的动态链接库名name 用于定义动态链接库中导出函数的导出名
如果有VC链接库开发经验的朋友可能会发现,为什么Delphi中没有类似VC中对应于dll的lib导入库呢?这里简单解释一下,其实VC中与dll配套的lib文件起到的作用也就是告诉连接器静态链接导出函数的时候,从哪里获取导出函数入口地址用的,实际没有实体代码,这里Delphi中的声明代码其实起到的也就是这个作用。由于lib没有实体代码,所以很容易通过dll获取对应的lib导入库。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved