Matlab与VB混合编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*打开生成的安装包中的
setup.Lst文件,[Bootstrap Files]字段里面只保留 VB6STKIT.DLL和 msvbvm60.dll几个文件, 其余的都删掉,否则在不同 版本的系统上使用可能会 报错。
16 /23
6、应用程序安装 (1)安装VB应用程序。在要安装的计算机上,新建一 个文件夹作为应用程序的安装目录。将打包好的VB程序 中的压缩包(.CAB)解压到安装目录中再进行安装。 ( 2 )安装 Matlab 控件。运行 COM 组件包中的 distrib 文 件夹下的类名.exe文件,运行过程中全部按“y”覆盖原 文件。将安装目录指向VB应用程序安装所在的目录(即 VB应用程序与Matlab控件安装在同一个目录下),否则 dll文件是没有办法注册的,选择后,全部点击Next,至 Matlab Component Runtime安装完成,DOS安装界面也 会随后自动关闭。
,在算法上采用C++语句,所以运行速度较快,可应用于实时运算
。通过这种方法可以发布成脱离MATLAB和VB的安装软件, 在其他没有安装MATLAB和VB软件的计算机上都能运行。
8 /23
实现步骤(一) Matlab7.1 版
1、开发环境: Visual Studio 6.0 Matlab7.1安装路径不能有空格或中文 2、编写m文件 (注:m文件必须为m函数,不能是脚本文件) function plotcur x=0:0.01:2*pi; y=sin(x); set(gcf,'visible','off'); plot(y) print -dmeta; close(gcf);
编译
编译过程
21 /23
4、生成自解压安装包 在本地使用的话,MATLAB会自动注册 COM 组件,无需发布;但如果要在没有安装 MATLAB的计算机上使用,安装包就需添加 MATLAB运行库MCR。点击PackageAdd MCR
22 /23
总结
把Matlab的m文件编译成VB可以执行的.dll文件,
MATLAB与VB混合编程
MATLAB是MathWork公司于1984年推出的数学工具 软件,其科学计算功能的强大和开放式的开发思想使其成 为当今最为流行的、最为优秀的科技应用软件之一,在数 值分析、科学计算、算法开发、建模和仿真等方面具有独 特的优势。支持对通信系统、信号处理、图像处理、小波 分析、鲁棒控制、系统辨别、非线性控制、模糊控制、神 经网络、优化理论、样条、商用统计分析等30多个不同领 域的内容的处理和分析。但其用户界面的设计不如VB方便 ,解释执行的运行环境使其开发的程序不能离MATLAB独 立地进行发布。因此通过MATLAB与VB混合编程,利用 VB作为前端开发工具进行应用程序开发的同时,将应用程 序中较为复杂的数学计算交由MATLAB来完成,从而更加 地充分发挥两者的优势。
15 /23
(2)VB程序发布 filemake project1.exe Add-Ins Add-In Manager,点击Package and deployment Wizard,并选中Loaded/unloaded Add-Ins Package and deployment Wizard,按提 示进行操作,直至打包发布完成。
MatlAB2013a版生成COM组件的方法步骤:
1、同MATLAB7.1版安装路径不能有空格或中 文,编写m函数文件,选择C/C++编译器 2、在命令窗口运行deploytool。输入project名 称,Type选项选择Generic COM Component。
20 /23
3、为COM组件添加类及类的输出函数,然后 点击编译。
14 /23
5、应用程序发布
(1)COM组件打包
在本地使用的话,MATLAB会自
动注册 COM组件,无需发布;但
如果要在没有安装MATLAB的计 算机上使用,安装包就需添加
MATLAB运行库MCR。打开创建
的COM工程,点击Component Package Component选项,选 中Include MCR,点击create。
1 /23
主要内容
一、 ActiveX技术 二、 动态链接库(DLL)
实现步骤(一) Matlab7.1 版
开发环境 编写m文件 生成COM组件 VB中调用动态链接库
应用程序发布
应用程序安装
实现步骤(二) Matlab2013a 版
2 /23
一、 ActiveX技术
ActiveX自动化协议是一种允许一个应用程序 或组件去控制另一个应用程序或组件的协议,VB和 MATLAB都支持ActiveX自动化协议。通过自动化 协议,可以在VB应用程序中执行MATLAB命令, 并从的MATLAB工作空间中获取数据以及向 MATLAB输送数据从而实现数据的交互。要实现这 种功能,用户首先必须获得Matlab ActiveX对象在 系统注册表中定义的名字─Matlab.Application。
17 /23
18 /23
实现步骤(二) Matlab2013a 版
MATLAB7.1及以前版本生成COM组件的命令是comtool,从 R2006a(7.2)开始换成了deploytool。2013b版和2014a 版利用deploytool生成COM组件时都会出现如下图所示的 错误:
19 /23
13 /23
编写VB程序代码 Dim Matlab As testCOM.testCOMclass Private Sub Form_Load() Set Matlab = New testCOM.testCOMclass End Sub Private Sub Command1_Click() Call Matlab.plotcur Picture1.Picture = Clipboard.GetData() End Sub Private Sub Command2_Click() Picture1 = Nothing End Sub
5 /23
Dim Matlab As Object Private Sub Form_Load() Set Matlab = CreateObject("matlab.application") End Sub Private Sub Command1_Click() Dim strcommand As String strcommand = "x=0:0.01:2*pi;y=sin(x);set(gcf,'Visible','off');" strcommand = strcommand + "plot(x,y);print -dmeta;close(gcf);" Matlab.execute (strcommand) Picture1.Picture = Clipboard.GetData() End Sub Private Sub Command2_Click() Picture1 = Nothing End Sub
执行的效率高,可以实现脱离MATLAB和VB环境而 独立运行。但当COM组件一旦编译成功之后,m文件 的功能就不能变化,所编程序的数据交换能力弱。
23 /23
谢谢!
24 /23
C:为自己实际的MatlAB安装目录
10 /23
(2)安装C++编译器 在MATLAB命令窗口里输入:mbuild –setup命令
•
Please choose your compiler for building standalone
MATLAB applications:
Would you like mbuild to locate installed compilers
[y]/n? n
有个让选y/n的matlab自动定位编译器位置的提示 时 要选n , 然后手动指定Microsoft Visual Studio文件夹所 在位置,选择安装VC++6.0编译器。
11 /23
(3)创建COM组件工程
在命令窗口中输入comtool,出现com组件builder。选择
FILENew Project选项。 Component name选项中输入组件名称:test (*组件名不能与m文件重名) (4)添加m文件 (5)生成动态链接库 单击build Com Object 在创建的COM工程下会 生成相关的组件。
4 /23
Dim Matlab As Object Private Sub Form_Load() Set Matlab = CreateObject("matlab.application") End Sub Private Sub Command1_Click() Dim strcommand As String strcommand = "x=0:0.01:2*pi;y=sin(x);plot(x,y)" Matlab.execute (strcommand) End Sub Private Sub Command2_Click() Matlab.execute ("close gcf") End Sub
9 /23
3、生成COM组件
(1)设置系统路径
我的电脑属性 高级 环境变量 系统变量 Path选项,增加以下路径:
头文件:C:/MATLAB7/extern/include;
库:C:/MATLAB7/extern/lib/win32/microsoft/msvc60; DLL:C:/MATLAB7/bin/win32
6 /23
利用ActiveX进行VB和Matlab的交互通信时,
所采用的Matlab语句是直接使用Matlab提供的
函数和图形库命令。该方法编程效率高,但程序
的执行必须在Matlab环境下,这样会占用内存,
使程序的执行速度受一定影响。
7 /23
二、动态链接库(DLL)
借助Visual C++与MATLAB的接口,将MATLAB的程序 (.M)文件编译为动态链接库(.DLL) COM组件,VB可以通过 调用DLL实现对Matlab的调用。这种方法脱离了MATLAB环境
m Matlab as ObjectSet
Set Matlab = CreateObject(“Matlab.Application”)
Matlab.execute (Strcommand)
VB可执行一条由Strcommand字符串决定的Matlab指 令或在Matlab的工作空间调用M函数文件,在屏幕上 显示图形或计算结果。
12 /23
4、VB中调用动态链接库 (1)注册动态链接库 将生成的COM组件复制到其他位置,运行 distrib文件夹中的_install.bat文件注册动态链 接库。 (2)创建VB工程 引入COM组件。选择ProjectReference选项, 将test_com_1.0 Type Library 选中