VC6.0与 matlab 接口(方法)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11
编译、执行程序,点击结果如图
12
可以看出,相比VC编写dll文件,利用MATLAB 编译器生成dll 文件,以及在VC中调用该dll文件要方便和简单的多。利用编译 器还可以根据需要生成C\C++源文件,可执行文件等。 MATLAB6.5的编译器为3.0版本,MATLAB7.0的编译器为4.0版 本,4.0版本的编译器对原编译器进行了很多改进,3.0很多方法 都不再使用,上述方法如果在7.0版本上使用会出现错误。
4
Matlab自带的Matlab Compiler
Matlab Compiler的作用是将m文件转化成C/C++代码(也就是通 常所用的mcc命令),这种源代码需要用C/C++编译器编译连接 成独立应用程序,在将m文件转成独立应用程序的过程中生成的 C/C++文件,原则上是可以被其它的C/C++代码调用的,编译器 可以通过设置mcc命令的选项,将m文件编译成动态链接库文件、 C/C++文件、可执行文件等一系列文件。到matlab R12.1为止, Matlab Compiler的m程序转换成C/C++代码功能有很多限制: 1. 2. 3. 4. 5. 6. 不能转换脚本m文件,只能转换m函数; 不能使用matlab对象; 不能用input或者eval操作matlab空间变量; 不能动态地命名变量,然后用load或者save命令来操作; 不能处理具有嵌套调用其他m文件的m文件; 不能使用MATLAB内联函数;
利用编译器将m文件转换成对应的C\C++文件,并在VC中调用
首先要保证编译器设置正确,编译器的设置可以参考前面两节的内容。 如果以前已经进行了配置就不需要这一步。 1、在MATLAB中编写如下函数: function [x]=gjfcz(A,b) %A=[-1.5 1 2; 4 2 3 ; -3 2 8] %b=[3;5;6] x=A\b 保存名为gjfcz.m,该函数的功能为求解线形方程组。 2、在MATLAB的命令窗口输入以下命令:mcc -m gjfcz.m 该命令用来生成对应的C文件和可执行程序。在MATLAB工作目录下(一 般是MATLAB\work)将会生成如下文件:gjfcz.exe,gjfcz.c,gjfcz.h, gjfcz_main.c,其中gjfcz.c,gjfcz.h是我们需要的文件。
10
6、在ceshiDlg.cpp文件中添加头文件dlltest.h #include "dlltest.h" 打开dlltest.h文件,里面有有关函数的定义,找到其中三个函 数: extern mxArray * mlfHuatu_test(void); extern void dlltestInitialize(void); extern void dlltestTerminate(void); 从函数意思不难知道它们的作用,dlltestInitialize用来初始化 dll库,dlltestTerminate用来结束调用dll,mlfHuatu_test为主 程序执行函数。将三个函数拷贝到button响应代码中,进行修 改: void CCeshiDlg::OnButton1() { dlltestInitialize(); mlfHuatu_test(); dlltestTerminate(); }
VC与Matlab接口编程
Matlab Engine方式 Matlab C\C++函数库(7.0后不建议使用,略) Matlab自带的Matlab Compiler Matcom技术 COM组件接口方法
(Visual C++6.0
Matlab 6.5)
3
Matlab Engine方式
常用数学软件选讲
VC与Matlab接口编程
如果在C\C++语言中能用MATLAB那么简单的代码来实现该功 能就可以大大减少工作量,VC和MATLAB接口就是做这个工 作的。 利用MATLAB的编译工具将m文件方便的转化为C\C++语言、 可执行程序(exe)、动态连接库文件(dll)、COM组件等等,并 可直接供C\C++语言调用,利用VC和MATLAB接口技术可以在 VC中充分发挥MATLAB的数值计算功能,并且可以不依赖 MATLAB软件运行。 我们在编写程序时,可以在VC下做出很漂亮的界面,而把复 杂的数值处理交给MATLAB去做(实际上MATLAB也能做界面 GUI(Graphic User Interface),而且做出的界面并不比VC逊色, 但是需要MATLAB软件作为后台运行,如果不依赖MATLAB软 件运行的话,可以在VC中调用GUI),然后通过接口技术将 MATLAB集成到VC中,这样可以大大减轻编程的负担,并减 2 少程序编写时间。
25
1.建立一个名为Example2基于对话框的MFC(exe) 工程。 2.在matcom中新建一个名为huatu.m文件
26
3.在matcom命令窗口中运行该函数
27
4.将生成的huatu.h、huatu.cpp(默认位置为 安装目录 :\matcom45\samples\Debug)和matlib.h、v4501v.lib(默认 位置为 安装目录:\matcom45\lib)四个文件拷贝到建立的工程 Example2目录下。
1、启动MIDEVA ,File->New,新建如下Test1.m文件: x=1:0.1:10; y=sin(x); plot(x,y); 将文件保存(如下图)。
m文件保存的默认位置为:matcom安装目录\matcom45,生 成的C++文件保存的默认位置为:matcom安装目录 \matcom45\Debug\,本例matcom安装目录为C盘 即 C:\matcom45\Debug\,在该目录下将会产生Test1.h、 Test1.cpp、Test1.r 、Test1.obj文件。
17
安装完成后,启动界面MIDEVA(下图)。MIDEVA集成开发环 境包括命令行窗口、变量列表窗口、命令列表窗口和编译链 接信息窗口等几部分,并有详细的帮助文档
wenku.baidu.com
18
Matcom命令输入方法与Matlab相同。如果安装在中 文版操作系统时,输入命令前加一空格。(下图)
19
m文件编译后放入VC中
Matlab Engine是指一组Matlab提供的接口函数,支持C 语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab 作为后台服务器,而C程序作为前台客户机,通过Windows 的动态控件与服务器通信,向Matlab Engine传递命令和数 据信息,从Matlab Engine接受数据信息。用户可以在前台 应用程序中调用这些接口函数,实现对Matlab Engine的控 制。采用这种方法几乎能利用Matlab全部功能,但是需要 在机器上安装Matlab软件,而且执行效率低,因此在实际 应用中不采用这种方法,在软件开发中也不可行,适合个 人使用或做演示用。
14
Matcom 简介
这是个第三方控件,很小(8M多),原本属于mathtool公司,后 来被Mathworks公司合并了,使用该工具可以将m脚本文 件和m函数转化成相同功能的C\C++文件,相比其它方法 使用matcom具有如下优点: 1. 转换过程简单(由matcom工具自动实现),容易实现; 2. 可以方便的生成动态链接库文件(dll)和可执行文件(exe); 3. 不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件; 4. 设置环境后,可以使用Matlab的工具箱函数; 但matcom也有以下不足: 1. 对struct等类的支持有缺陷,对class数据类型; 2. 部分绘图语句无法实现或得不到准确图象,尤其是三维图 象;
利用mcc命令,通过不同的参数设置可以生成不同的文件,例如 : mcc -B sgl myfun 将myfun.m文件生成对应的c文件和使用c图 形库的可执行程序 mcc -B sglcpp myfun 将myfun.m文件生成 相应的c++文件和使用c++图形库的可执行程序
(如果自己编写的程序图形不能显示菜单栏和工具栏,拷贝文件夹 13 bin到当前目录下)
9
3、在MATLAB打开文本编辑器(File->New->M-file)写一个简单的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中新建一个名为ceshi基于对话框的工程,在工程中添加一个名为" 测试"的button按钮。将dlltest.h 、dlltest.lib和dlltest.dll文件拷贝到当前工 程目录下,并通过Project->Add To Project->Files 选择拷贝到当前目录下 的三个文件,将文件引入工程。
5.将第四步拷贝的四个文件加入到VC工程中:工程->添加工 程->文件,选择刚才拷贝到Example2目录下的四个文件。完成 后如图
23
运行程序,点击画图按扭
程序的release 版本需要 ago4501.dll、 v4501v.dll、 v4501.lib三个 文件的支持。
24
在VC中调用matcom编译后的函数
首先新建一个函数huatu.m,该函数的功能是:接受用户输入 的左端点值和右端点值两个输入参数,然后在该区间画正弦 图形。函数还将生成两个随机数,作为一个点的坐标在图中 打印出来(绿点),用来说明如何在VC中处理调用函数的 返回值。
20
2、在VC中用MFC Wizard(exe)创建一个基于对话框名为Example的工程。 在面板上添加一个ID为IDC_BUTTON1按扭。 3、将C:\matcom45\Debug目录下的Test1.cpp文件的内容拷贝到 void CExamleDlg::OnButton1()下
21
4、将C:\matcom45\lib\下的matlib.h 和v4501v.lib文件和 C:\matcom45\debug下的Test1.h文件拷贝到工程Example目录下,然后在 VC中将库文件和头文件加入到工程中:工程->添加工程->Files,选择刚刚拷 贝到Example目录下的matlib.h 、v4501v.lib和Test1.h文件
15
Matcom 简介
相比Matlab自带的编译器Compiler,用Matcom 转化代码要简单和方便得多。
本节将以VC6.0和Matcom为例,详细介绍如何 利用Matcom进行VC与Matlab的联合编程。
16
Matcom安装
安装Matcom前要已求安装VC6.0。
Matcom可以独立于Matlab运行,但需要外 部的C++编译器,在安装时指定Matlab的位 置是为了让编译文件中需要的一些系统函 数找到路径。
22
5、在ExamleDlg.cpp中加入如下代码: #include "matlib.h" #include "Test1.h" 6、在void CExamleDlg::OnButton1()中分别添加一个初始化类 库调用函数”initM(MATCOM_VERSION)”和一个结束类库调用 函数”exitM()”
5
动态链接库方式
1、必须保证编译器的正确配置,因为编译器使用了C\C++库函数,所以在使用前需要使 用 mex -setup 和 mbuild -setup 两个命令对编译器进行配置, 如果以前已经进行了配置就不 需要这一步。
6
mbuild -setup
7
8
2、设置头文件和库文件的路径,配置完成如图1和图2
相关文档
最新文档