浅析VC与matlab接口编程(一)作者:孙科QQ:44760299邮箱:c_dinco@sina.com Matcom是mathTools公司推出的一个能将M文件转化成相同功能C++代码的工具。相比Matlab自带的编译器Compiler,用Matcom转化代码要简单和方便得多。本文将结合作者编程经验,以VC6.0和Matcom为例,详细介绍如何利用Matcom进行VC与Matlab的联合编程。 Matcom安装安装Matcom前要已求安装VC6.0。在安装过程中出现选择编译器对话框,选择“是”(图一)。出现选择是否安装Matlab时,选“否”。其他选项采用默认设置。Matcom可以独立于Matlab运行,但需要外部的C++编译器,指定Matlab的位置是为了让编译文件中需要的一些系统函数找到路径用的。图一安装完成后,启动界面MIDEVA(图二)。MIDEVA集成开发环境包括命令行窗口、变量列表窗口、命令列表窗口和编译链接信息窗口等几部分,并有详细的帮助文档。图二1Matcom命令输入方法与Matlab相同。如果安装在中文版操作系统时,输入命令前加一空格。(如图三)。 图三下面详细介绍如何将m文件编译后放入VC中。1、启动MIDEVA,File-New,新建如下Test1.m文件:x=1:0.1:10;y=sin(x);plot(x,y);将文件保存(如图四)。 图四2m文件保存的默认位置为:matcom安装目录\matcom45,生成的C++文件保存的默认位置为:matcom安装目录\matcom45\Debug\,本例matcom安装目录为C盘即C:\matcom45\Debug\,在该目录下将会产生Test1.h、Test1.cpp、Test1.r、Test1.obj文件。2、在VC中用MFCWizard(exe)创建一个基于对话框名为Example的工程。在面板上添加一个ID为IDC_BUTTON1按扭。3、将C:\matcom45\Debug目录下的Test1.cpp文件的内容拷贝到voidCExamleDlg::OnButton1()下,(如图五)。图五4、将C:\matcom45\lib\下的matlib.h和v4501v文件和C:\matcom45\debug下的Test1.h文件拷贝到工程Example目录下,然后在VC中将库文件和头文件加入到工程中:工程-添加工程-Files,选择刚刚拷贝到Example目录下的matlib.h、v4501v和Test1.h文件(如图六)。3图六5、在ExamleDlg.cpp中加入如下代码:#includematlib.h#includeTest1.h6、在voidCExamleDlg::OnButton1()中分别添加一个初始化类库调用函数”initM(MATCOM_VERSION)”和一个结束类库调用函数”exitM()”(如图七)。图七4运行程序,点击画图按扭(如图八)。图八 程序的release版本需要ago4501.dll、v4501v.dll、v4501.lib三个文件的支持。以上只是介绍了VC和Matcom接口编程的一个简单例子,功能并不完善,也远远达不到一个软件所要求的水平,但只要熟悉了VC和Matcom接口编程的基本原理和方法,相信大家一定能够编出优秀的软件。浅析VC与Matlab联合编程(二)5 在“浅析VC与Matlab联合编程(一)”中简单介绍了VC与matcom的接口编程,实现了VC调用matcom的一个基本功能,要真正熟练使用接口编程,还要对函数调用有一定了解。本文通过一个实例,较详细的介绍如何在VC中调用matcom编译后的函数。 首先新建一个函数huatu.m,该函数的功能是:接受用户输入的左端点值和右端点值两个输入参数,然后在该区间画正弦图形。函数还将生成两个随机数,作为一个点的坐标在图中打印出来(绿点),用来说明如何在VC中处理调用函数的返回值步骤如下:1.建立一个名为Example2基于对话框的MFC(exe)工程。2.在matcom中新建一个名为huatu.m文件,如图1;图13.在matcom命令窗口中运行该函数,如图2;6图24.将生成的huatu.h、huatu.cpp(默认位置为安装目录:\matcom45\samples\Debug)和matlib.h、v4501v.lib(默认位置为安装目录:\matcom45\lib)四个文件拷贝到建立的工程Example2目录下。5.将第四步拷贝的四个文件加入到VC工程中:工程-添加工程-文件,选择刚才拷贝到Example2目录下的四个文件。完成后如图3;7图36.在Example2dlg.cpp中添加头文件:(如图4所示)#includematlib.h#includehuatu.h8图47.为工程建立界面:添加一个Button按扭控件;添加四个Editbox控件,用于显示数据;添加五个Statictext控件,四个显示文字,一个显示图形,将显示图形的Statictext的ID设置为ID_PIC。其他所有控件属性保持默认(为了看图方便,可以适当调整显示图形Statictext控件的边缘)。如图5所示图598.按Ctrl+W为控件添加变量。如图6所示图69.为Button1按钮添加响应代码。如图7所示图710.运行程序,输入左端点和右端点,点击”画图”按钮,结果如图8所示。(本例只是为了说明如何调用函数,没有进行容错处理)10图8注:如果在编译中出现下列错误:fatalerrorC1010:unexpectedendoffilewhilelookingforprecompiledheaderdirective 进行下列设置:工程-设置-C/C++选择precompiledheaders选择第一或第二项:自动选择预补偿页眉,如图9所示11图9 本例介绍了在VC中如何调用用matcom编译的m函数的方法,并且基本上实现了VC和Matlab的无缝结合,希望对大家编程会有所帮助,现在时间很紧,下次有机会详细介绍m文件翻译成C++语言后代码的含义。我的QQ:44760299欢迎大家一起讨论!浅析VC与Matlab联合编程三 在“浅析VC与Matlab联合编程一”和“浅析VC与Matlab联合编程二”中介绍了matcom,这个工具可以将用matlab写的m文件翻译成C++文件,或者是可执行文件(exe)或库文件(dll)。但是matcom在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图象,尤其是三维图象。 实际上VC与matlab的接口实现方法有很多种,matcom只是其中一种,本文再介绍一种比较容易实现的方法:COM接口方法。COM(CompponentObjectModel组件对象模型)是一项比较复杂的技术,详细讲的话几本书也讲不完,所以在这里不作介绍,本文通过一个例子详细介绍如何在matlab下做COM组件,以及如何在VC中调用COM组件。 首先在Matlab编辑器里编辑m函数文件:启动matlab-File-New-M-file函数内容如图1:该函数无输入输出参数,文件保存为huatu.m。12图1m函数huatu.m在matlab下建立COM组件,步骤如下:1、在matlabcommandwindow输入如下命令:comtool出现com编辑界面,如图2:图2com组件编辑界面132、新建工程:File-NewProject…,如图3。图3com组件属性设置图4com组件属性设置13、设置组件属性,在Componentname项中填写组件名称component,这时候会自动生成类component,在Classname项中填写类名称huatu,如图4 为了便于区分,选中Classes中的component,点击“remove”按钮,将类component移除,再点击Add添加新类huatu,结果如图5。点击OK,接下来出现一个对话框,选择Yes.14图5com组件属性设置24.添加文件:选中左边工作区的huatu,点击Project-AddFile…,选择已经编辑好的函数文件huatu.m,如图6。需要注意的是m文件必须是m函数,否则会报错,如果是m脚本文件的话,只需要改为无输入输出参数的m函数即可。15图6添加m文件5、生成com组件:点击Build-COMObject…,结果如图7。图7com组件已经由matlab做好,默认的保存位置为:matlab安装位置\work\component。VC中调用COM组件,步骤如下:1、在VC中建立名为ComHuaTu的基于对话框的MFC(exe)。2、面板上添加一个名为“画图”的button按钮,如图8。图7工程界面163、将component_idl.h和component_idl_i.c文件拷贝到VC建立的工程ComHuaTu目录下。两文件默认目录为\work\component\src4、将上面两文件加入工程:工程-添加工程-Files,选择刚刚拷到目录下的component_idl.h和component_idl_i.c文件。5、将目录/extern/include/下的mwcomtypes.h拷贝到工程ComHuaTu目录下,并加入到工程中,方法同上。6、为程序添加头文件component_idl.h、component_idl_i.c和mwcomtypes.h,结果如图9图9添加头文件7、按钮画图函数添加代码:图10添加按钮函数代码函数代码的意义涉及到COM,正在写VC调用COM组件所涉及到的有关COM方面的知识。8、设置预编译头文件:工程-设置(快捷键Alt+F7),选择C/C++项precompliedHeaders,设置如图1117图11预编译头文件设置9、编译、连接、运行,结果如图12。图11运行结果18 可以看出利用VC调用com组件的方式来调用matlab比较简单,而且几乎支持matlab所有的函数,在m文件较大、用matcom、调用mathlibrary或使用mcc方式无法实现的时候,推荐使用。需要说明的是,以上程序拷到另一台机器上是无法直接运行的,因为COM组件没有新机器上注册,如果要在另一台机器上使用的话,还需要打包安装COM组件,并且由于本程序代码很简单,所以也就不提供源程序了,自己可以动手做一下。 本人正在写一本关于VC和matlab接口方面的书,估计年底完稿,详细介绍VC和matlab接口的几种方法,并提供详细的例子,例子都是我自己写过的,欢迎大家提供些好的意见和建议。浅析VC与MATLAB联合编程四在浅析VC与MATLAB联合编程一、浅析VC与MATLAB联合编程二和浅析VC与MATLAB联合编程三中简单介绍了VC和MATLAB接口的两种方法,初学者可能会问为什么要用VC和MATLAB接口,接口的实质又是什么,本文就通过一个例子来回答这两个问题。 首先来介绍一下MATLAB。MATLAB名字由MATrix和LABoratory两词的前三个字母组合而成。那是20世纪七十年代后期的事:时任美国新墨西哥大学计算机科学系主任的CleveMoler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。 经几年的校际流传,在Little的推动下,由Little、Moler、SteveBangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。 MATLAB以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的UMIST,瑞典的LUND和SI