MATLAB与VB混合编程方式简易教程
3.1 MATLAB与Visual Basic语言的混合编程方式MATLAB提供了与C/C++、Fortran语言的接口,但没有与Vsiual Basic语言的接口,要想实现MATLAB与Visual Basic的混合编程可以通过以下途径来实现。
1.通过ActiveX方式一是用Visual Basic开发服务器ActiveX组件,MATLAB作为客户端程序使用,事实上无论是用VB还是VC或者其他语言环境开发的ActiveX组件,对于MATLAB来说集成与调用方式是一样的,一般情况下很容易地将不同环境下开发的用途各异的ActiveX对象集成到一个MATLAB应用中来。
其使用方法见第5章关于MATLAB作为ActiveX的客户端使用方法。
二是在VB环境下可以通过ActiveX自动化接口将MATLAB作为Visual Basic语言的一个ActiveX 部件调用。
MATLAB ActiveX自动化服务的功能主要包括在MA TLAB工作空间执行MA TLAB 命令,以及直接从工作空间存取矩阵等,我们在第5章中关于MA TLAB作为服务器组件的部分的例子就是以Visual Basic应用程序,以MATLAB作为服务器客户端的。
2.通过动态链接库方式该种方式是一种间接调用MATLAB命令的方式,借助于C++与MA TLAB的接口,将MATLAB 的程序文件(.M文件)编译为动态链接库(.DLL),VB在代码中与调用其他语言编写的DLL文件一样调用MATLAB中.M 文件生成的动态链接库。
这种方法可以脱离具体的MA TLAB环境,运行效率较高。
3.通过嵌入VB的矩阵函数库MatrixVB的方法MatrixVB是由第三方(mathtools公司)提供的COM组件,包含了大量与MATLAB相似的函数与调用语法,可以加强VB内建数学运算与图形展示功能,在VB程序代码中可以像使用VB自己的函数一样使用MatrixVB的函数,而且可以不依赖于MATLAB的环境在Visual Basic中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。
MatrixVB函数库的功能大致可分为8大类(矩阵运算、运算符重载、图形图像处理、最优化运算、多项式、信号处理、随机与统计分析、控制系统)。
除以上3种方式外,我们还可以通过DDE的方式实现VB与MATLAB的数据通信。
3.2 MatrixVB 环境设置3.2.1 在VB应用中引入MatrixVB1.安装MatrixVB(1) 系统要求为:●硬盘空间8.8M以上;●操作系统要求Windows 95及其以上版本,或者Windows NT 4.0及其以上版本。
(2) 在安装盘上找到Matrixvb4510.exe,双击后启动安装程序,并按照安装向导安装。
(3) 然后在“开始→运行”菜单中用命令regsvr32 mMatrix.dll注册,如图7-1所示。
图7-1 注册MatrixVb2.建立EXE项目(1) 启动VB开发环境并建立“标准EXE”项目,如图7-2所示。
图7-2 选择标准EXE工程模板(2) 单击“打开”按钮,所建立的项目及开发界面如图7-3所示。
图7-3 VB项目及开发界面3. 为项目引入MatrixVB在project下拉菜单中单击References,在弹出的对话框中选中MMatrix项目,系统将加载MatrixVB的动态链接库MMatrix.DLL,如图7-4所示。
图7-4 引入MatrixVB的动态链接库3.2.2 在VB中使用MatrixVB的命令与函数1.采用立即窗口的形式在项目中引入MatrixVB库后,在VB中可以直接在开发环境的“立即窗口”中输入MA TLAB命令,让VB编译器立即执行,如在MATLAB主窗口中一样。
在View下拉菜单的中选择Immediate Windows选项在开发环境中得到“立即窗口”,如图7-5所示。
图7-5 VB中的立即窗口例如,在“立即窗口”中输入如下命令:A=eye(4,4)A.show命令将产生一个4行4列的单位矩阵,并在MatrixVB的观察窗口Matrix Viewer中显示结果,如图7-6所示。
图7-6 在VB立即窗口中产生矩阵或者,在“立即窗口”中输入命令:mesh(peaks(3))将在MatrixVB的图形窗口Figure1中绘制并显示一个曲面网线图,如图7-7所示。
图7-7 通过立即窗口绘制曲面图2.在VB程序代码中使用可以将MatrixVB的函数与命令调用嵌入到VB程序代码中实现相应的功能,其函数与命令的使用方式类似于在MATLAB环境中的使用方式。
例如,我们可以将上例中的功能在VB代码中实现,步骤为:(1) 在上例的主窗口中增加一个按钮,如图7-8所示。
图7-8 为窗口Form1增加按钮(2) 在按钮的Click事件处理过程中产生一个4行4列单位矩阵并显示,代码如下:Private Sub Command1_Click()A = eye(4, 4)A.ShowEnd Sub单击命令按钮运行程序,运行结果如图7-9所示。
图7-9 VB代码中用MatrixVB产生矩阵同样,在代码中也可以嵌入MatrixVB绘制图形的函数与命令,将该例按钮的Click事件处理过程中的代码进行如下修改。
Private Sub Command1_Click()mesh(peaks(30))End Sub运行结果如图7-10所示。
图7-10 通过嵌入MatrixVB命令绘图在发布基于MatrixVB的VB应用程序时,应将相应的库文件随系统一起发布。
这些文件包括:v4510v.dll、c4510v.dll、ago4510.dll、msvcrt.dll、msvcirt.dll和MMatrix.dll。
由于MMatrix.dll是COM 服务器,所以必须在操作系统中注册后方可使用,注册时可使用如下命令行语句:regsvr32 mMatrix.dll如果目标操作系统是Windows 95,还必须发布另外两个OpenGL文件即opengl32.dll与glu32.dll,但在其他操作系统如Windows 98/Me/NT 4/2000等环境下,则不需要安装这些文件。
2.3 MatrixVB 的矩阵操作矩阵是表示一组数据关系的组合,在MatrixVB中包含了许多矩阵分析函数,为了在VB中直接应用MatrixVB这些高效的计算方法,一般将VB中的数组当成矩阵进行处理,需要说明的是与matricVB矩阵元素相关的运算在VB中对应的数据类型一般为double类型。
2.3.1 在VB中生成MatrixVB矩阵可以像在MATLAB命令窗口中那样,直接在VB中定义MA TLAB矩阵变量;也可以使用VB 的VARIANT通用型变量表示矩阵,其定义的方法如下:Dim x As Variant一般在VB中产生MatrixVB的方法主要有以下几种:1.通过函数mabs转化为MatrixVB的矩阵将VB中定义的数组通过函数mabs转化为MatrixVB的矩阵,格式为:MATRIXVB_MATRIX=mabs(VB_ARRAY)MATRIXVB_MATRIX为MatrixVB的矩阵名称,如同在MATLAB窗口中那样,不需要事先定义,VB_ARRAY是VB程序中定义的数组,也可以是单独的VB常量与变量。
修改图7-8中command按钮的Click事件的处理过程代码为:Private Sub Command1_Click()Dim A(1to 3,1to 3) As doubleDim i,j As integerfor i=1 To 3for j=1 To 3A(i,j)=CDbl(i+j)NextNextB=mabs(A)A. showEnd Sub该段代码首先定义了一个二维VB数组A,然后将其赋值,通过mabs函数转化为MatrixVB矩阵B并将其显示出来。
运行程序并单击该按钮,运行的结果如图7-11所示。
图7-11 通过函数mabs产生的MatrixVB矩阵2.通过MatrixVB函数生成矩阵可以使用MatrixVB中的特殊函数(如zeros()、ones()、magic()等)直接生成矩阵。
如在VB程序代码中直接嵌入语句:A=zeros(3,4)A.show结果将产生一个3行4列元素都为0的矩阵并将其显示出来。
在应用程序中我们也可以先定义变量,然后再赋值产生矩阵。
产生矩阵VB支持的两种类型为Matrix与Variant的如下语句,都将产生一个3×4的0矩阵。
Dim mat As MatrixDim x As VariantSet mat=zeros(3,4) '赋值为3×4的0矩阵Set x=zeros(3,4) '赋值为3×4的0矩阵3.通过函数 CreateMatrix通过函数CreateMatrix创建的矩阵可以在创建过程中直接赋值,格式为:CreateMatrix(p1 , p2 ,…, p n ,)p1 , p2 ,…, p n为矩阵的值。
函数Reshape用来设置由函数CreateMatrix所创建的函数的维数,格式为:Reshap(X,rows,cols)X为由CreateMatrix创建的矩阵,rows为指定的行数,cols为指定的列数,如下例所示:A=CreateMatrix(1,2,3,4,5,6,7,8,9)Reshap(A,3,3)A.Show创建一个矩阵,并将其指定为3行3列,结果如图7-12所示。
图7-12 由CreateMatrix 产生的MatrixVB矩阵2.3.2 对矩阵元素进行操作1.矩阵元素的存取及与VB的数据转换(1) 通过圆括号方式访问MatrixVB矩阵,但是这种方式只能对矩阵元素进行写操作,其格式如同访问VB的数组元素一样,例如:A是一个二维矩阵则下列代码:A(i,j)=2.0可以将矩阵的第i行第j列赋值为1。
(2) MatrixVB矩阵属性rN、iN可以以读写的形式访问矩阵X中的每个元素的实部和虚部,其中N表示矩阵的维数,例如,对于一维MatrixVB矩阵AA.r1(i)=12'写操作a=A.r1(i+1) '读操作将矩阵A的第i个元素赋值为12,将第i+1个元素赋值给VB中的变量a。
再如,对于二维矩阵BB.r2(i,j)=12a=B.r2(i,j)将矩阵B的第i行j列元素赋值为12,将矩阵B的第i行第j列元素赋值给VB中的变量a,要通过iN的方式来访问。
(3) X.simple可以将MatrixVB矩阵X转换为VB中的数据类型。
在X为只有一个元素的矩阵情况下,若X为一个实数则将值转换为VB中的Double类型,如:Dim S As DoubleA=CreateMatrix(1.0)S=A.simple若X为一个字符的单元素矩阵,则X.simple返回一个VB中的字符串类型;若X为由多个元素的一维或者多维矩阵,则该表达式将返回一个矩阵,但不能自动转换为VB中相应的一维或者多维数组。
五种VB与MATLAB混合编程接口的方法
摘要: 为充分发挥Matlab与VB各自的优势,将二者结合起来进行工程应用软件的开发。
本文介绍了五种VB与MATLAB混合编程接口的方法,并对各方法性能的优劣进行了比较和评价。
关键词: Matlab;Visual Basic;ActiveX;DDE;MatrixVB;DLL;COM1引言Microsoft Visual Basic是由微软公司开发的可视化编程语言之一,由于它简单易学的特点,只要稍有编程基础就可以很快掌握,可视化的用户界面设计功能,把程序设计人员从繁琐复杂的界面设计中解脱出来。
因而很快就风靡全球,是一种十分强大和有生命力的Windows 编程语言。
但是我们知道VB语言也有它的缺点,即对于数值计算方面其能力欠佳。
Matlab是Matlab 擅长处理数值计算和系统模拟仿真,已被广泛应用于数字信号处理、电力系统仿真、图像处理、系统识别等各个领域。
但是Matlab也存在一些缺点: 1、和其他高级程序相比,程序的执行速度较慢,那是因为;2、对于底层硬件操作以及编程界面方面远远比不上VB、VC 等软件。
鉴于二者各自的优势,为了提高工程软件的开发效率和质量,将两种软件结合起来进行工程应用软件的开发便成了实际的需要。
本文主要讨论VB与Matlab混合编程的几种方法。
2Vb和Matlab接口实现方法介绍2.1借助ActiveX技术ActiveX是特点就是使不同的软件对象可以跨进程、跨平台并能在网络上进行交互。
Matlab ActiveX自动化服务的功能主要包括在(1) Execute (Command as String) 方法: 执行本方法将调用MATLAB执行一条Command 字符串决定的Matlab命令,同时返回一条字符串表示命令的执行情况。
任何能在MATLAB命令行窗口执行的命令均可以被包括在Command 字符串中。
(2) GetFullMatrix方法: 该方法用来将Matlab中的一个矩阵变量传送到VB 程序的一个一维数组或二维数组中。
【推荐下载】关于matlab与vb混合编程技术研究
关于matlab 与vb 混合编程技术研究关于matlab 与vb 混合编程技术研究1 引言在工业生产和科研工作中, 经常会遇到复杂数据信息的处理问题, 往往需要大运算量的矩阵计算以及对分析结果进行实时、直观的图形化显示。
VB 是Windows 操作系统下优秀的可视化编程语言, 在用户界面设计和快速开发等方面具有独特的优势。
从 5.0 版本开始, 可以编译链接生成本机代码的可执行文件, 能够脱离VB 的集成开发环境进行发布, 较好地封装了用户的算法, 有效地保护用户的源代码, 目前世界上有数以百万计的程序员把它当作首选的编程工具。
然而, VB 只提供了基本的数学函数库, 对于开发计算功能齐全的大型系统来说, 远远不够。
这种情况下, 如果使用基本函数库编写特殊功能的数学函数库, 不仅要求用户对算法有深入的理解, 而且费时, 还可能因为在设计时和运行时的错误处理机制的欠缺,难以保证每个函数功能的正确性。
MATLAB 是Math Work 公司于1984 年推出的数学工具软件, 其科学计算功能的强大和开放式的开发思想使其成为当今最为流行的、最为优秀的科技应用软件之一, 在数值分析、科学计算、算法开发、建模和仿真等方面具有独特的优势。
最新的 6.1 版本的工具箱(Toolbox)支持对通信系统、信号处理、图像处理、小波分析、鲁棒控制、系统辨别、非线性控制、模糊控制、神经网络、优化理论、样条、商用统计分析等30多个不同领域的内容的处理和分析。
但其用户界面的设计不如VB 方便, 解释执行的运行环境使其开发的程序不能离MATLAB 独立地进行发布, 目只有供 C 和Fortran语言使用的编程接口, 这对广大的VB 程序员来说是一个很大的不便。
如果能够在VB 中方便地调用MATLAB 的数学函数库, 增强科学计算的功能, 就可以发挥各自的优势, 缩短开发周期, 保证系统的健壮性, 开发出脱离VB 和MATLAB 的应用软件系统。
VB与Matlab混合编程
一、准备工作(1)matlab版本2012或以上(2)vb6.0二、适用条件matlab生成的无论是应用程序还是动态连接库或者是COM组件都需要MCR的支持,MCR因用户安装的Matlab版本不同分为32位和64位,所以为了能够将自己编译的M文件能够应用于其他的电脑上,首先要在目标电脑上安装自己电脑中MCR这个应用程序,它的存放位置为Matlab路径\ toolbox\compiler\deploy\win64三、Matlab与VB基于Com组件的实现过程(1)在Matlab中生成M文件的COM组件打开App菜单栏,找到Matlab Complier单击进入应用,会出现上图的界面,在Classes 中可以添加自己要用的类群,所谓的类群就是好比如果你想建立一个专门用于解决非线性方程的类,就可以建立个nonlinear equations solver,在类下可以添加用于解决非线性方程的各种M函数文件。
在这里我建立了fft类,在这个类中我添加了个myfft.M文件,这个M文件实际上使用了Matlab自带的离散傅立叶变换函数fft,这么做的目的是为了说明我们可以调用matlab已经建立好的各种算法,方便的在vb中调用。
添加好所需要的资源,点击build就OK了。
(2)注册生成的COM组件在Build Success后会在你选择生成Com组件的文件地址发现两个文件distrib和src,在distrib文件里你会发现你生成.dll文件,在电脑上注册它就可以在vb上调用。
至于怎么注册,自行脑补。
(3)在VB中调用Com组件在vb中的引用中通过浏览功能引用生成.dll文件,那么现在就可以使用了。
使用步骤:1.Dim xxx as new 工程名.类名xxx可以随意,工程名为你在Matlab中生成COM组件时自己定义的COM 组件名,类名为COM组件下你添加的类名2.通过xxx.函数名(nargout,y1,y2,y3,....,yn,x1,x2,...,xn)函数名为Matlab中定义在此类下的函数名,nargout为输出变量个数,y1,y2,...,yn 为输出变量,x1,x2,....,xn为输入变量。
VB调用MATLAB混合编程教程(完整版)
VB与MATLAB混合编程探讨摘要:介绍了VB与MATLAB混合编程的方法,二者结合可以充分利用VB的方便快捷和MATLAB软件工具箱的强大功能。
关键词:VBVC++MATLABDLL编译MATLABAdd-inMATLAB是MathWorks公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库、工具箱,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。
但是MATLAB语言是一种解释执行的脚本语言,运算速度较慢是一个比较突出的问题。
VisualBasic作为一门易学易用的编程语言,受到很多工程技术人员的青睐,其执行速度相对较快,界面友好。
因此实现VB与MATLAB混合编程,可以为科研工作和工程应用提供有力的技术支持。
1基本思路及实现方法MATLAB提供了与C++、Fortran的程序接口,并没有提供直接与VB的接口。
目前VB与MATLAB混合编程方面主要使用以下一些方法:(1)在VB中通过调用MATLAB的引擎(Engine)接口,使用Windows的OLE或ActiveX通道与MATLAB通信。
通过Object.Execute MATLAB语句在程序中直接使用MATLAB提供的函数库和图形库。
这种方法可以较快地编写出程序;但在调用引擎时,会在后台启动一个MATLAB进程,影响程序运行速度,占用内存。
(2)通过使用嵌入VB的矩阵函数库MatrixVB的方法。
MatrixVB是由原MathTools公司开发的第三方插件,利用与MATLAB相似的函数、语法嵌入到VB中,可以象使用VB的函数、命令一样使用MATLAB函数。
这种方法语法和函数使用比较简单,编程效率很高,几乎完全融入VB语言,特别对图形的处理非常方便,弥补了其他方法在图形处理上的弱点。
安装后,只需在打开的工程中添加MatrixVB库即可(在工程->引用对话框中选中MMatrix)。
但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。
VisualStudio与Matlab实现混合编程
VisualStudio与Matlab实现混合编程环境:Win10vs2010Matlab2015⾥⾯有很多选做的内容,其中2、3必做1.Matlab环境设置:(选做)我没有做这步,因为打mbuild -setup指令不识别,缺少SDK,但是可以正常调⽤Matlab,这步是其他⽅式调⽤Matlab中的⼀步,使⽤Matlab⽣成DLL⽂件,VS引⽤要建⽴独⽴运⾏的C应⽤程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使⽤mbuild命令可以直接将C/C++源代码编译为独⽴运⾏程序,在这些源代码中可以使⽤Matlab提供的接⼝来调⽤Matlab数学库函数。
虽然⽣成的可执⾏程序可以脱离Matlab环境运⾏,但是它需要Matlab C/C++数学库⽂件或者图形库⽂件的⽀持才能运⾏。
但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调⽤,则不仅可以独⽴与Matlab环境,也不需要那两个库函数的⽀持。
在 Matlab 的Command Window 下输⼊命令。
mbuild – setup操作过程如下图:然后输⼊命令mex – setup以类似的⽅法配置编译器。
Matlab 的配置完成。
2.VS环境设置(必做)(1)设置Include 和Library ⽬录项⽬右键->属性->VC++⽬录->包含⽬录:添加<MATLAB>\R2010b\extern\include\win64 我的是:D:\RUANJIAN\Matlab\extern\include\win64<MATLAB>\R2010b\extern\include\ 我的是:D:\RUANJIAN\Matlab\extern\include项⽬右键->属性->VC++⽬录->库⽬录:添加<MATLAB>\R2010b\extern\lib\win32\microsoft 我的是:D:\RUANJIAN\Matlab\extern\lib\win64\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft截图::(2)设置⼯程⽬录: ( 我并没有设置)项⽬右键->属性->C/C++->常规->附件包含⽬录:添加<MATLAB>\R2010b\extern\include\win64<MATLAB>\R2010b\extern\include\项⽬右键->属性->链接器->常规:添加<MATLAB>\R2010b\extern\lib\win32\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft项⽬右键->属性->链接器->输⼊->附件依赖性:添加 (必做)libeng.liblibmat.liblibmex.liblibmx.lib 注:1.lib⽂件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减 2.附件依赖性在VS2010前以空格隔开,在VS2010后使⽤;隔开。
Matlab与VB混合编程
3、生成COM组件
(1)设置系统路径
我的电脑属性 高级 环境变量 系统变量 Path选项,增加以下路径:
头文件:C:/MATLAB7/extern/include;
库:C:/MATLAB7/extern/lib/win32/microsoft/msvc60; DLL:C:/MATLAB7/bin/win32
,在算法上采用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);
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。
基于VB与Matlab的混合编程方法_隗燕琳
2.1 采 用 动 态 链 接 库 DLL(Dynamic Link Libraries)方 法 编程
DDL 方 法 是 用 Matlab 提 供 的 COM 生 成 器 (COM Builder)[3],将 Matlab开发的算法做 成 组 件 ,这 些 组 件 作 为 独立的 COM 对 象,
步骤4打包和分 发 组 件:一 旦 组 件 生 成 成 功 就 可 以 打 包分 发 给 使 用 用 户,在 Component 菜 单 中 选 择 Package Component选项就可创 建 一 个 自 解 压 可 执 行 程 序;如 果 该
* 收稿日期:2013年2月27日,修回日期:2013年3月30日 作 者 简 介 :隗 燕 琳 ,博 士 ,工 程 师 ,研 究 方 向 :舰 船 磁 性 防 护 。
Vol.41 No.8 1388
计算机与数字工程 Computer & Digital Engineering
总 第 286 期 2013 年 第 8 期
基于 VB 与 Matlab的混合编程方法*
隗燕琳 陈进明 (92957 部 队 舟 山 316000)
摘 要 根据 Matlab强大的数据处理能力和 Visual Basic界面开发能力的编程优点,研究探讨 了 两 者 相 结 合 混 合 编 程 的 方 法 ,并 分 析 了各种混合方法中数据格式、数据交互机制及具体应用实例。采用两者混合编程对工程计 算 软 件 的 开 发 ,提 高 开 发 质 量 和 效 率 具 有 重 要 的 意义。
2013 年 第 8 期
计算机与数字工程
1389
项目要在 其 它 用 户 计 算 机 上 所 使 用,运 行 自 解 压 程 序 将 DLL 文件注册于其它计算机即可。
Matlab与VB混合编程
*打开生成的安装包中的
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
Matlab2012a和VS2010混合编程的实现
MATLAB2012a和VS2010混合编程的实现(Win7+32bit)lihui-mn@ 1.在MATLAB中编写m文件如下:function y = myfunc(a)y = a.*a;2.MATLAB环境设置操作过程如下:3.创建动态链接库mcc: 将M文件编译成C文件的MATLAB命令;csharedlib: 创建一个C可共享的动态链接库;myfunclib: 要创建的dll文件的名字;myfunc: M文件的名字.如果要加入动态链接库的是多个函数, 那么写成myfunc1 myfunc2 …结果生成文件:4. VS2010环境设置a.创建一个console application, 并新建一个cpp文件(否则之后Property Pages中没有C/C++目录 )b. 设置目录①Property Pages -> VC++ Directories -> Include Directories, 添加(安装目录下)E:\tools\MATLAB\extern\include\②Property Pages -> VC++ Directories -> Library Directories, 添加E:\tools\MATLAB\extern\lib\win32\microsoft③Property Pages -> C/C++ -> General -> Additional Include Directories, 添加E:\tools\MATLAB\extern\include\④Property Pages -> Linker -> General -> Additional Library Directories, 添加E:\tools\MATLAB\extern\lib\win32\microsoft⑤Property Pages -> Linker -> Input -> Additional Dependencies, 添加5. Windows环境设置Computer - > Properties -> Advanced system settings -> Environment Variables -> User Variables -> path, 添加E:\tools\MATLAB\extern\lib\win32\microsoft;E:\tools\MATLAB\bin\win32Computer - > Properties -> Advanced system settings -> Environment Variables -> System Variables -> path, 添加E:\tools\MATLAB\runtime\win32;E:\tools\MATLAB\bin;E:\tools\MATLAB\extern\lib\win32\microsoft;E:\tools\MATLAB\bin\win326. 将MATLAB生成的文件以及MATLAB安装目录bin下的两个文件copy到VS工程目录下7. 在VS窗口下编写程序#include"myfunclib.h"usingnamespace std;void main(){myfunclibInitialize();//初始化DLL动态链接文件double _x[5] = {1, 2, 3, 4, 5};//定义输入数组double _y[5];//定义输出数组mxArray* x = mxCreateDoubleMatrix(1, 5, mxREAL);//创建1*5矩阵memcpy(mxGetPr(x), (void*)_x, sizeof(_x));//copy输入数据mxArray* input[1] = {x};//将矩阵x的指针作为输入参数传递进去mxArray* output[1];//定义输出参数指针mlxMyfunc(1, output, 1, input);//调用M函数mxArray* y;//定义输出结果指针y = output[0];//将输出参数传递给输出结果memcpy(_y, mxGetPr(y), sizeof(_y));//copy输出数据myfunclibTerminate();//结束DLL库for(int i = 0; i< 5; i++){printf("%f\n", _y[i]);}}参考资料:1. /s/blog_59955afc0100qqgt.html2. /f?kz=2023504793. http://www.mathworks.fr/support/solutions/en/data/1-FWTSV5/index.html?product=ML&solution=1-FWTSV54. /s/blog_6ac4211e0100xm7k.html。
MATLAB与VB混合编程方式简易教程
3.1 MATLAB与Visual Basic语言的混合编程方式MATLAB提供了与C/C++、Fortran语言的接口,但没有与Vsiual Basic语言的接口,要想实现MATLAB与Visual Basic的混合编程可以通过以下途径来实现。
1.通过ActiveX方式一是用Visual Basic开发服务器ActiveX组件,MATLAB作为客户端程序使用,事实上无论是用VB还是VC或者其他语言环境开发的ActiveX组件,对于MATLAB来说集成与调用方式是一样的,一般情况下很容易地将不同环境下开发的用途各异的ActiveX对象集成到一个MATLAB应用中来。
其使用方法见第5章关于MATLAB作为ActiveX的客户端使用方法。
二是在VB环境下可以通过ActiveX自动化接口将MATLAB作为Visual Basic语言的一个ActiveX 部件调用。
MATLAB ActiveX自动化服务的功能主要包括在MA TLAB工作空间执行MA TLAB 命令,以及直接从工作空间存取矩阵等,我们在第5章中关于MA TLAB作为服务器组件的部分的例子就是以Visual Basic应用程序,以MATLAB作为服务器客户端的。
2.通过动态链接库方式该种方式是一种间接调用MATLAB命令的方式,借助于C++与MA TLAB的接口,将MATLAB 的程序文件(.M文件)编译为动态链接库(.DLL),VB在代码中与调用其他语言编写的DLL文件一样调用MATLAB中.M 文件生成的动态链接库。
这种方法可以脱离具体的MA TLAB环境,运行效率较高。
3.通过嵌入VB的矩阵函数库MatrixVB的方法MatrixVB是由第三方(mathtools公司)提供的COM组件,包含了大量与MATLAB相似的函数与调用语法,可以加强VB内建数学运算与图形展示功能,在VB程序代码中可以像使用VB自己的函数一样使用MatrixVB的函数,而且可以不依赖于MATLAB的环境在Visual Basic中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。
