VC和MATLAB混合编程方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC和MATLAB混合编程方法

VC和MATLAB混合编程方法   本文介绍了两类VC++与MATLAB混合编程方法,一类为在MATLAB中调用VC++动态链接库,另一类为在VC++中调用MATLAB动态链接库。并对复杂数据结构传递及特殊需求动态库的生成进行了重点介绍。   【关键词】MATLAB VC++ 复杂对象   MATLAB是MathWorks公司研发的应用软件,其强大的计算功能以及开放式的开发思想使其成为当今最为流行的应用软件之一,在数值分析、科学计算、算法仿真等领域具有独特的优势。但由于其解释性语言的原因,在控制底层硬件及执行大量循环语句时出现了瓶颈。   VC++是Microsoft推出的可视化编程环境,它不仅能方便的开发出应用软件中各种用户界面,且能较好的控制与系统底层的硬件通信。但在复杂的信号处理及图形图像处理等领域中,由于没有底层函数库的支持,增加了开发难度并延长了开发周期。   可以看出,这两种开发软件各有其优缺点,将其结合,进行混合编程,就可以做到扬长补短。   在实际项目开发中,混合编程具有两种应用模式,一种为在MATLAB中调用VC++动态链接库,另一种为在VC++中调用MATLAB动态链接库。接下来对这两种应用模式做详细的介绍。   1 MATLAB调用VC++动态链接库   1.1 动态链接库生成   VC++编译生成能让MATLAB调用的动态库,过程与其生成一般动态库相同。直接在VC++环境中新建一个WIN32 Dynamic-Link Library工程,在CPP文件中定义需导出的接口,再在H文件中声明需导出的接口,编译成功后即可生成DLL文件。本例中将生成forcastChannParaDll.dll库及forcastChannParaDll.h头文件。   在接口定义时,为了简化接口并提高程序可读性,将输入输出参数分别封装在结构体中。下面列出了结构体在头文件中的定义。   下面是导出接口函数的声明(接口中将输入参数整合为forcastInStr类型结构体,将输出参数整合为forcastOutStr类型结构体并以结构体指针形式输出)。   Extern “C” __declspec(dllexport) int forcastChannPara(struct forcastInStr forcastIn,struct forcastOutStr *forcastOut);   1.2 动态链接库调用   在MATLAB中调用VC++动态链接库,通常分为三步:第一步加载动态库;第二步调用接口函数(构造动态库接口函数的输入输出参数,调用接口函数);第三步卸载动态库。结合1.1节VC++导出的接口形式,下面代码对MATLAB调用进行了示例。   在上述代码中,当涉及到将结构体对象传递给VC++时,首先根据VC++提供的H文件构造一个MATLAB结构体,再将其转换为一个类C++的结构体对象,最后传递给VC++。当调用接口输入参数类型中包含指针时(此时可作为输出参数使用),就需要在MATLAB中构造一个相应数据类型的指针(本例中构造一个结构体类型指针)。因为有结构体对象参与了接口计算,故在卸载动态库前要将这些对象清除,否则不能正常卸载动态库。   2 VC++调用MATLAB动态链接库   2.1 动态链接库生成   MATLAB生成动态链接库,通常分为三步:第一步编辑m文件(注意将所有m文件都改写成函数模块形式);第二步设置MATLAB编译环境(使用配置工具关联具体的高级语言编译器);第三步使用MATLAB编译命令将m文件编译转换为VC++可调用的动态库。   当使用第三方算法库时经常会碰到m文件调用动态库这种使用方式。如果依然按照上面步骤直接编译生成动态库,将不能在VC++中正常调用。以1.2节m文件的编译为例,查看代码可知,在加载动态库时需要对应的H文件。但MATLAB的mcc命令只能将m文件编译为C文件,继而链接生成动态库,而不能将H文件进行编译。因此,可采用如下方式:首先依据H文件手动生成对应的m文件代替H文件;然后再用此m文件与其它m文件一同编译生成动态库。   可以看出,对于复杂对象传递,MATLAB m文件的编写比较简单,这是因为大部分工作都在VC++处理。上面m文件的输入输出参数都被定义为结构体对象,对于输入参数,因在VC++调用时已将其构造为MATLAB可以识别的结构体类型的mwArray对象,故此处可以按照结构体形式直接使用;而对于输出参数,在MATLAB中直接定义进行输出,当在VC++调用时,也需要构造一个结构体类型的mwArray对象,用来接收MATLAB的返回参数。   编译此m文件将生成freAssign.dll、freAssign.lib库及freAss

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档