Matlab与VC混合编程的方法研究
2016-03-14李雯
李 雯
(宝鸡职业技术学院电子信息工程系,721000)
Matlab与VC混合编程的方法研究
李 雯
(宝鸡职业技术学院电子信息工程系,721000)
摘要:Matlab与VC是应用范围较广的编程语言,将二者进行混编是计算机软件领域人士一直思考的重要课题。本文就如何实现二者的完美结合进行了深入的探讨。
关键词:Matlab;VC;混合编程
Matlab,其全称为MATrix LABoratory,中文翻译为矩阵实验室,它是由美国The MathWorks公司出品的商业数学软件,其主要功能是数值计算,而VC语言作为系统设计语言,在编写计算机程序时有着广泛的应用,然而,Matlab与VC语言由于各种原因的限制导致二者之间的编程无法共存,这给开发者带来了不小的麻烦。近年来随着编程方法的日益成熟,二者之间互不兼容的现象得到了改善,特别是Matlab2010的研发不仅保存了传统的Matlab7.0编译器基本构架稳定的优势,而且开发了新的功能,使得混编程序向下兼容性越来越好,但二者混编以后仍然会出现结构不稳定的现象。混编设计都要遵循一定的原则,有着固定的混编方法,因此在进行混编时,只要掌握了一定的方法都可以按照需要选择不同的混编模式。笔者经过长期的实践,发现了以下三种方法进行混编会取得良好的效果
1 使用Matlab编译器执行Matlab语言
Matlab编译器可将Matlab程序编译为独立可执行程序,通过修改接口文件的方式实现在C/C++中调用Matlab文件。生成独立运行的Matlab程序是使用Matlab编译器编译的文件最常用的一种方式。Matlab编译器的主要功能是将Matlab程序编译成其他语言可以调用的模块或元素。Matlab编译器的主要功能是将Matlab程序编译为可执行程序或者动态链接库,经过编译后的可执行程序可以所有的计算机中运行,不管这台计算机是否安装了Matlab软件,而编译后的动态链接库则成为C/C++开发人员的工具,使他们在任何一台计算机中完成软件的开发工作。除此之外架构在Matlab编译器之上的Matlab Builder NE工具箱可以将Matlab程序编译为Com组件供第三方程序调用。
传统的Matlab 6.5以及以前的编译器都将研究的重点放在了如何实现Matlab程序与C/C++程序之间的转化,而Matlab 7.0及其以后的编译器打破了这种观念的桎梏,将MCR技术引用到设计中,将开发的重点放在了Matlab程序编译为MCR可执行的程序。MCR是Matlab提供的一组动态链接库,可以说是简化版的Matlab,它支持Matlab语言的所有特征,这就意味着所有的Matlab程序都可以在MCR中得到编译,这样即使计算机未安装Matlab也可以执行Matlab程序。
Matlab编译器最常见的应用就是将其编译为独立可执行文件。采用MCC命令的-m选项可以将*.m函数文件直接编译为独立可执行文件。动态链接库的编译过程与独立可执行文件的编译过程类似,可以有两种方法将*.m函数文件编译为动态链接库。①采用MCC编译选项;②采用捆绑命令文件。
2 通过Matlab引擎直接执行Matlab语言
Matlab作为一个颇受欢迎的数学软件,包括了多种数学运算程序,这样当用户需要数值运算的时候就可以运用Matlab引擎使用Matlab中的运算公式进行计算。Matlab的界面部分是由C/C++语言组成的,为用户的使用提供了方便。
Matlab中蕴含着大量的API函数用于支撑Matlab操作的实现,这些函数都以eng开头,因此掌握eng函数是实现Matlab 与V C++语言顺畅兼容的前提和基础。具体操作流程如下:
2.1Engine * engOpen(coust char * startcmb)
启动Matlab引擎时要注意其操作环境,如果操作环境为Windows的话,就必须要将startcmd参数设置为NULL。
2.2int engClose(Engine * ep)
关闭Matlab引擎。
2.3int engEvalString ( Engine * ep , const char * string )
使 Matlab 引擎执行字符串 string中的表达方式
2.4int engPutVariable (Engine * ep , const char * nane , const mxArray * mp )
向Matlab引擎工作空间中引入一个新的Matlab 阵列变量,name选项这一栏填写为引入Matlab中的名字。
2.5mxArry * engGetVariable ( Engine * ep , const
char * name )
从Matlab 引擎工作空间中复制名称为 name 的变量。
2.6int engGetVisible ( Engine * ep , bool * value )
判断Matlab引擎工作窗口是否可见。
C/C++通过Matlab引擎调用Matlab程序的这种方法必须要在计算机中存有Matlab软件的环境下才能实现,脱离了这个环境,就无法实现C/C++语言与Matlab程序的兼容。
3 VC++中调用Matlab *·m函数编译后的动态连接库
通过Matlab编译器的mcc 命令,可以将Matlab * ·m文件直接编译为动态链接库以供Visueil C++ 调用,以Plotsinc 函数为例,采用命令mcc-B csharedlib :libsincplot Sincplot ·m 将其编译为动态链接库。接着,创建一个 Visual C++ 单文档的工程 testsincplot-dll ,然后通过选择project settings link input菜单选项将库文件libsincplot.lib、mclmcrrt. lib加入到Visual c++6.0工程中 ,其中libsincplot.lib为上述步骤中由Matlab编译器生成的文件之一。
将libsincpiot.dll复 制 到Windows系 统 目 录 或 者testsincpiot_dll工程的debug目录下,将libsincplot.h、libsincplot.lib文件拷贝到testsincpiot_dll工程的源文件目录下,并将其libsincplot.h文件添加到工程中。
4 结语
Matlab与C/C++混合程序设计的实践性和技巧性较强,本文介绍了混合编程的三种方法,具体应用还要结合开发者的具体情况进行选择,希望对从事程序开发读者有所帮助。
参考文献
[1]刘维著. 精通Matlab与c/c++混合程序设计[M]. 北京航空航天大学出版社
[2] 张亮,王继阳著. MATLAB与c/c++混合编程[M]. 人民邮电出版社出版
课题名称:省职教学会的课题《基于VC和MATLAB的仿真实验平台的设计》
课题编号:SZJYB2015033
Matlab and VC mixed programming method
Li Wen
(Baoji professional technology institute,Department of electronic and information engineering,721000)
Abstract:Matlab and VC is the programming language has a wide application scope,will be to mix both people in the field of computer software has been a important subject.In this paper,how to achieve the perfect combination of the two had in-depth discussion.
Keywords:Matlab;VC;Mixed programming