版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1VC与Matlab接口编程 Matlab Engine方式 Matlab CC+函数库(7.0后不建议使用,略) Matlab自带的Matlab Compiler Matcom技术 COM组件接口方法(Visual C+6.0 Matlab 6.5)第1页/共46页第一页,编辑于星期日:七点 二十九分。2Matlab Engine方式 Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C程序作为前台客户机,通过Windows的动态控件与服务器通信,向Matlab Engine传
2、递命令和数据信息,从Matlab Engine接受数据信息。用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,适合个人使用或做演示用。 第2页/共46页第二页,编辑于星期日:七点 二十九分。3Matlab自带的Matlab Compiler Matlab Compiler的作用是将m文件转化成C/C+代码(也就是通常所用的mcc命令),这种源代码需要用C/C+编译器编译连接成独立应用程序,在将m文件转成独立应用程
3、序的过程中生成的C/C+文件,原则上是可以被其它的C/C+代码调用的,编译器可以通过设置mcc命令的选项,将m文件编译成动态链接库文件、C/C+文件、可执行文件等一系列文件。到matlab R12.1为止,Matlab Compiler的m程序转换成C/C+代码功能有很多限制: 1. 不能转换脚本m文件,只能转换m函数; 2. 不能使用matlab对象; 3. 不能用input或者eval操作matlab空间变量; 4. 不能动态地命名变量,然后用load或者save命令来操作; 5.不能处理具有嵌套调用其他m文件的m文件; 6. 不能使用MATLAB内联函数;第3页/共46页第三页,编辑于星
4、期日:七点 二十九分。41、必须保证编译器的正确配置,因为编译器使用了CC+库函数,所以在使用前需要使用mex -setup 和mbuild -setup两个命令对编译器进行配置,如果以前已经进行了配置就不需要这一步。动态链接库方式第4页/共46页第四页,编辑于星期日:七点 二十九分。5mbuild -setup第5页/共46页第五页,编辑于星期日:七点 二十九分。6第6页/共46页第六页,编辑于星期日:七点 二十九分。72、设置头文件和库文件的路径,配置完成如图1和图2 第7页/共46页第七页,编辑于星期日:七点 二十九分。83、在MATLAB打开文本编辑器(File-New-M-file)
5、写一个简单的m函数: function y=huatu_test() x=-10:0.1:10; y=sin(x); plot(x,y,*) 文件保存为huatu_test.m。 4、在MATLAB命令窗口用如下命令生成dll文件和调用dll所需要的文件: mcc -t -W libhg:dlltest -T link:lib -h libmmfile.mlib huatu_test.m 生成的文件将会保存在当前目录下,默认的当前目录为:MATLAB根目录work,找到dlltest.h 、dlltest.lib和dlltest.dll文件,这三个文件是我们需要的。5、在VC中新建一个名为ce
6、shi基于对话框的工程,在工程中添加一个名为测试的button按钮。将dlltest.h 、dlltest.lib和dlltest.dll文件拷贝到当前工程目录下,并通过Project-Add To Project-Files 选择拷贝到当前目录下的三个文件,将文件引入工程。 第8页/共46页第八页,编辑于星期日:七点 二十九分。96、在ceshiDlg.cpp文件中添加头文件dlltest.h #include dlltest.h 打开dlltest.h文件,里面有有关函数的定义,找到其中三个函数: extern mxArray * mlfHuatu_test(void); extern v
7、oid dlltestInitialize(void); extern void dlltestTerminate(void); 从函数意思不难知道它们的作用,dlltestInitialize用来初始化dll库,dlltestTerminate用来结束调用dll,mlfHuatu_test为主程序执行函数。将三个函数拷贝到button响应代码中,进行修改: void CCeshiDlg:OnButton1() dlltestInitialize(); mlfHuatu_test(); dlltestTerminate(); 第9页/共46页第九页,编辑于星期日:七点 二十九分。10编译、执行
8、程序,点击结果如图 第10页/共46页第十页,编辑于星期日:七点 二十九分。11可以看出,相比VC编写dll文件,利用MATLAB 编译器生成dll文件,以及在VC中调用该dll文件要方便和简单的多。利用编译器还可以根据需要生成CC+源文件,可执行文件等。MATLAB6.5的编译器为3.0版本,MATLAB7.0的编译器为4.0版本,4.0版本的编译器对原编译器进行了很多改进,3.0很多方法都不再使用,上述方法如果在7.0版本上使用会出现错误。 利用mcc命令,通过不同的参数设置可以生成不同的文件,例如:mcc -B sgl myfun 将myfun.m文件生成对应的c文件和使用c图形库的可执
9、行程序 mcc -B sglcpp myfun 将myfun.m文件生成相应的c+文件和使用c+图形库的可执行程序 (如果自己编写的程序图形不能显示菜单栏和工具栏,拷贝文件夹bin到当前目录下)第11页/共46页第十一页,编辑于星期日:七点 二十九分。12利用编译器将m文件转换成对应的CC+文件,并在VC中调用 首先要保证编译器设置正确,编译器的设置可以参考前面两节的内容。如果以前已经进行了配置就不需要这一步。1、在MATLAB中编写如下函数: function x=gjfcz(A,b) %A=-1.5 1 2; 4 2 3 ; -3 2 8 %b=3;5;6 x=Ab 保存名为gjfcz.m
10、,该函数的功能为求解线形方程组。2、在MATLAB的命令窗口输入以下命令:mcc -m gjfcz.m该命令用来生成对应的C文件和可执行程序。在MATLAB工作目录下(一般是MATLABwork)将会生成如下文件:gjfcz.exe,gjfcz.c,gjfcz.h,gjfcz_main.c,其中gjfcz.c,gjfcz.h是我们需要的文件。第12页/共46页第十二页,编辑于星期日:七点 二十九分。13Matcom 简介这是个第三方控件,很小(8M多),原本属于mathtool公司,后来被Mathworks公司合并了,使用该工具可以将m脚本文件和m函数转化成相同功能的CC+文件,相比其它方法使
11、用matcom具有如下优点: 1. 转换过程简单(由matcom工具自动实现),容易实现; 2. 可以方便的生成动态链接库文件(dll)和可执行文件(exe); 3. 不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件; 4. 设置环境后,可以使用Matlab的工具箱函数; 但matcom也有以下不足: 1.对struct等类的支持有缺陷,对class数据类型; 2. 部分绘图语句无法实现或得不到准确图象,尤其是三维图象;第13页/共46页第十三页,编辑于星期日:七点 二十九分。14相比Matlab自带的编译器Compiler,用Matcom转化代码要简单和方便得多。本节将以VC6.0和Mat
12、com为例,详细介绍如何利用Matcom进行VC与Matlab的联合编程。 Matcom 简介第14页/共46页第十四页,编辑于星期日:七点 二十九分。15Matcom安装 安装Matcom前要已求安装VC6.0。 Matcom可以独立于Matlab运行,但需要外部的C+编译器,在安装时指定Matlab的位置是为了让编译文件中需要的一些系统函数找到路径。第15页/共46页第十五页,编辑于星期日:七点 二十九分。16安装完成后,启动界面MIDEVA(下图)。MIDEVA集成开发环境包括命令行窗口、变量列表窗口、命令列表窗口和编译链接信息窗口等几部分,并有详细的帮助文档 第16页/共46页第十六页
13、,编辑于星期日:七点 二十九分。17Matcom命令输入方法与Matlab相同。如果安装在中文版操作系统时,输入命令前加一空格。(下图)第17页/共46页第十七页,编辑于星期日:七点 二十九分。18m文件编译后放入VC中 1、启动MIDEVA ,File-New,新建如下Test1.m文件:x=1:0.1:10; y=sin(x); plot(x,y); 将文件保存(如下图)。m文件保存的默认位置为:matcom安装目录matcom45,生成的C+文件保存的默认位置为:matcom安装目录matcom45Debug,本例matcom安装目录为C盘 即 C:matcom45Debug,在该目录下
14、将会产生Test1.h、Test1.cpp、Test1.r 、Test1.obj文件。 第18页/共46页第十八页,编辑于星期日:七点 二十九分。192、在VC中用MFC Wizard(exe)创建一个基于对话框名为Example的工程。在面板上添加一个ID为IDC_BUTTON1按扭。3、将C:matcom45Debug目录下的Test1.cpp文件的内容拷贝到void CExamleDlg:OnButton1()下第19页/共46页第十九页,编辑于星期日:七点 二十九分。204、将C:matcom45lib下的matlib.h 和v4501v.lib文件和C:matcom45debug下的
15、Test1.h文件拷贝到工程Example目录下,然后在VC中将库文件和头文件加入到工程中:工程-添加工程-Files,选择刚刚拷贝到Example目录下的matlib.h 、v4501v.lib和Test1.h文件 第20页/共46页第二十页,编辑于星期日:七点 二十九分。215、在ExamleDlg.cpp中加入如下代码:#include matlib.h #include Test1.h 6、在void CExamleDlg:OnButton1()中分别添加一个初始化类库调用函数”initM(MATCOM_VERSION)”和一个结束类库调用函数”exitM()” 第21页/共46页第二
16、十一页,编辑于星期日:七点 二十九分。22运行程序,点击画图按扭 程序的release版本需要ago4501.dll、v4501v.dll、v4501.lib三个文件的支持。 第22页/共46页第二十二页,编辑于星期日:七点 二十九分。23在VC中调用matcom编译后的函数 首先新建一个函数huatu.m,该函数的功能是:接受用户输入的左端点值和右端点值两个输入参数,然后在该区间画正弦图形。函数还将生成两个随机数,作为一个点的坐标在图中打印出来(绿点),用来说明如何在VC中处理调用函数的返回值。 第23页/共46页第二十三页,编辑于星期日:七点 二十九分。241建立一个名为Example2基
17、于对话框的MFC(exe)工程。2在matcom中新建一个名为huatu.m文件 第24页/共46页第二十四页,编辑于星期日:七点 二十九分。253.在matcom命令窗口中运行该函数 第25页/共46页第二十五页,编辑于星期日:七点 二十九分。264将生成的huatu.h、huatu.cpp(默认位置为 安装目录:matcom45samplesDebug)和matlib.h、v4501v.lib(默认位置为 安装目录:matcom45lib)四个文件拷贝到建立的工程Example2目录下。5将第四步拷贝的四个文件加入到VC工程中:工程-添加工程-文件,选择刚才拷贝到Example2目录下的四
18、个文件。完成后如图 第26页/共46页第二十六页,编辑于星期日:七点 二十九分。276在Example2dlg.cpp中添加头文件:#include matlib.h #include huatu.h 第27页/共46页第二十七页,编辑于星期日:七点 二十九分。287为工程建立界面:添加一个Button按扭控件;添加四个Edit box控件,用于显示数据;添加五个Static text控件,四个显示文字,一个显示图形,将显示图形的Static text的ID设置为ID_PIC。其他所有控件属性保持默认 第28页/共46页第二十八页,编辑于星期日:七点 二十九分。298按Ctrl+W为控件添加变
19、量。 第29页/共46页第二十九页,编辑于星期日:七点 二十九分。309为Button1按钮添加响应代码。 第30页/共46页第三十页,编辑于星期日:七点 二十九分。3110运行程序,输入左端点和右端点,点击”画图”按钮,结果如图 第31页/共46页第三十一页,编辑于星期日:七点 二十九分。32注:如果在编译中出现下列错误:fatal error C1010: unexpected end of file while looking for precompiled header directive 进行下列设置:工程-设置- C/C+ 选择precompiled headers 选择第一或第二
20、项:自动选择预补偿页眉,如图第32页/共46页第三十二页,编辑于星期日:七点 二十九分。33COM接口方法 COM是component object module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。matlab6.5新推出来的combuilder就是把用matlab编写的程序做成com组件,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司(Matlab公司就是Mathworks公司)推荐
21、的使用方法。 第33页/共46页第三十三页,编辑于星期日:七点 二十九分。341:在Matlab编辑器里编辑m函数文件:启动matlab-File-New-M-file 函数内容如图:该函数无输入输出参数,文件保存为huatu.m 第34页/共46页第三十四页,编辑于星期日:七点 二十九分。35在matlab下建立COM组件,步骤如下: 1、在matlab command window 输入如下命令: comtool 出现com编辑界面,如图 第35页/共46页第三十五页,编辑于星期日:七点 二十九分。362、新建工程:File-New Project,如图(左) 3、设置组件属性,在“Com
22、ponent name”项中填写组件名称“component”,这时候会自动生成类“component”,在“Class name”项中填写类名称“huatu”,如图(右)第36页/共46页第三十六页,编辑于星期日:七点 二十九分。37为了便于区分,选中Classes中的component,点击“remove”按钮,将类component移除,再点击Add添加新类huatu,结果如图5。点击OK,接下来出现一个对话框,选择Yes. 第37页/共46页第三十七页,编辑于星期日:七点 二十九分。384. 添加文件:选中左边工作区的huatu,点击Project-Add File,选择已经编辑好的函
23、数文件huatu.m,如图6。需要注意的是m文件必须是m函数,否则会报错,如果是m脚本文件的话,只需要改为无输入输出参数的m函数即可。 第38页/共46页第三十八页,编辑于星期日:七点 二十九分。395、生成 com组件:点击Build-COM Object,结果如图 第39页/共46页第三十九页,编辑于星期日:七点 二十九分。40com组件已经由matlab做好,默认的保存位置为:matlab安装位置workcomponent。 VC中调用COM组件,步骤如下: 1、在VC中建立名为ComHuaTu的基于对话框的MFC(exe)。 2、面板上添加一个名为“画图”的button按钮,如图 第40页/共46页第四十页,编辑于星期日:七点 二十九分。413、将component_idl.h 和component_idl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度预拌干粉砂浆原材料采购及供应链管理合同2篇
- 2024年度代收款业务委托管理服务合同3篇
- 玉米户外课程设计
- 2024年繁华都市:动态观察协议3篇
- 2024年物流配送服务承包3篇
- 机械课程设计蚕豆
- 游艇模型课程设计
- 幼儿园射击特色课程设计
- DB12T 1118-2021 地面沉降监测分层标施工技术规程
- 开工仪式方案范文
- 驾驶员资格申请表
- 【自动驾驶技术发展文献综述4500字(论文)】
- 《孟子》精读学习通章节答案期末考试题库2023年
- –-重酒石酸去甲肾上腺素的合成
- 超深基坑工程施工关键技术
- 《基于课程标准的学历案》读书心得课件
- 中西医结合-慢性胃炎-课件
- 2023学年完整公开课版法布尔简介
- 供应商大会品质报告课件
- Module 6 Unit1 Can I have some sweets (说课稿)外研版(三起)英语四年级上册
- 管道安全检查表
评论
0/150
提交评论