VB调用MATLAB混合编程教程(完整版)
VB调用MATLAB步骤
a = Val(Text1.Text)
b = Val(Text2.Text)
Call hh.myadd(1, c, a, b) 'myadd为MATLAB中的函数名,1为输出变量个数,c为输出变量定义为variant型,a,b为输入变量,定义为double型
Y=a+b;
VB程序如下:
Private Sub Command1_Click()
Dim hh As New ABC.ab 'ABC 为COMPONENT NAME,ab为class name
Dim a As Double ‘输入参数
Dim b As Double ‘输入参数
3.matlab会列出所有电脑上所有的编译器,选择Microsoft Visual C/C++ version 6.0
4.The default location for Microsoft Visual C/C++ compilers is C:\Program Files\Microsoft Visual Studio, but that directory does not exist on this machine
Use C:\Program Files\Microsoft Visual Studio anyway [y]/n? 选择n
5.Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio] 键入vc++6的安装位置E:\INSTALLBACK\Microsoft Visual Studio vc6.0
VB调用matlab
本来,VB与MATLAB混编的时候,我采用了VB+matrixVB的方法,常用的矩阵运算,是够用了的。
但是在处理矩阵的LU三角分解的时候,发现matrixVB的三角分解形为:PA=LU。
而非数值计算方法中的A=LU,想了半天,终于决定用matlab搞一下,发现在MATLAB中默认的LU分解就是matrixVB中的形式,于是狠狠心,自编函数,生成M文件,在MATLAB中终于实现了A=LU的三角分解,为了和VB混编,想到了com方法。
于是在MATLAB命令窗口中输入comtool ,调出combuilder,进行DLL的生成,结果呢,就这一个小小的念头,折腾了我一天。
才终于成功,下面把我的心得给大家分享一下。
1.环境(操作系统XP ,MATLAB7.0 ,VC++6.0)开始,我并没有装VC++6.0,结果在编译DLL时总是提示找不到编译器,当然了是英文提示,大概有这么一句“Could not find the compiler "cl" on the DOS path。
”后来我装了VS2005,问题同上,最后才装了VC++6.0,并在MATLAB命令窗口中输入mbuild –setup……………….省略多行提示 Would you like mbuild to locate installed compilers [y]/n?y(在此输入y) Select a compiler: [1] Lcc C version 2.4 in G:\MATLAB6P5\sys\lcc [2] Microsoft Visual C/C++ version 6.0 in G:\Microsoft VisualStudio [0] NoneCompiler: 2(在此输入2)…………省略多行提示Are these correct?([y]/n): y(在此输入y)然后就可以成功的编译DLL了。
我终于明白,原来这个编译器也是需要和MATLAB的版本匹配的。
五种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 程序的一个一维数组或二维数组中。
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的COM组件实现二者混合编程
* 2007-12-27收到,2008-04-05改回** 基金项目:国家863课题(编号:2006AA 10Z 260)资助。
***孟力力,女,1982年生,硕士研究生,研究方向:温室环境建模与可视化模型。
文章编号:1003-5850(2008)06-0024-03VB 调用Matlab 的COM 组件实现二者混合编程Hybrid Pr ogr amming by Using COM of Matlab in VB Software孟力力 杨其长(中国农业科学院农业发展与可持续发展研究所 北京 100081)【摘 要】Matlab 具有强大的计算和图形处理能力,VB 具有良好的用户界面,将二者有机结合,可开发出功能强大的软件。
介绍了常见的五种方法。
为了使开发的VB 程序脱离Matlab 环境,详细介绍了一种基于组件对象模型(COM)的Matlab 与VB 混合编程方法,以COM Builder 为转换工具,将Matlab 函数文件转换为COM 组件,在VB 程序中调用这个组件。
并通过温室热环境模拟可视化模型的实现说明此方法。
【关键词】VB,Matlab,COM 技术,可视化模型中图分类号:TP 311.11文献标识码:AABSTRACT Matlab has power ful calculating and gr aphic pr ocessing ability ,VB has good user inter face .T he softwar e with powerful functions is developed based on combination of the above.Five methods are intr oduced in this paper.In or der to develop the VB pr ogr am wit hout Matlab environm ent ,the met hod based on COM is intr oduced in det ail.By mea n of Mat lab COM builder ,Matlab's function files can be converted into a COM component,which is applied in t he VB.The met hod is demonstr ated by implement ation of visual simulation model of gr eenhouse ther mal envir onment.KEYWORDS VB ,M atla b ,COM builder ,visual m odel Microsoft Visual Basic 是由微软公司开发的在Windows 操作平台上的主力编程语言之一,具有良好的可视化界面、程序集成化程度高、易学易用等特点,因而一经推出就风靡全球,是一种十分强大和有生命力的Windows 编程语言。
VS2008与MATLAB2010b混合编程
VS2008与MATLAB2010b混合编程环境目录设置:第一步:通过菜单工具/选项,打开选项页,点击项目和解决方案,然后在页面右面“显示以下内容的目录”下拉列表框中选择“包含文件”,添加路径:"D:\Program files\MATLAB\R2010a\extern\include"。
第二步:选择“库文件”,添加路径:D:\Program Files\MATLAB\R2010a\extern\lib\win32\microsoft以上步骤1)、2)只需设置一次,因为是对VS2008整体工作环境的设置。
3) 右击工程/属性,打开项目属性页,选择链接器/输入,在附加依赖项编辑框中,添加文件名libmx.lib libmat.lib libeng.lib。
4)如此设置后,能够正常编译,但运行时报错说找不到dll文件,如下而libmx.dll是存在于D:\Program Files\MATLAB\R2010a\bin\win32文件夹中,而在Win7系统变量里Matlab在安装的时候时只写入了路径D:\Program Files\MATLAB\R2010a\bin,故系统不会自动到其子文件中找dll,从而报错说找不到文件,这也解释了为什么旧版本的Matlab无此问题,因为可能旧版本的Matlab中没有将这些dll分离放到win32子文件夹中。
所以只要在系统变量中包含路径D:\Program Files\MATLAB\R2010a\bin\win32即可。
设置路径:我的电脑->(右击)属性->高级->环境变量->新建变量名:Path变量值:D:\Program Files\MATLAB\R2010a\bin\win32如果以上设置完成后,运行仍报错,可以尝试将VS2008关掉再启动,我就是这样,环境变量设置好后,仍然报错,重启电脑也解决不了问题,后尝试关掉工程,再启动运行就OK了!项目目录设置:第一步:添加生成的动态链接库文件第二步:选择项目->项目属性。
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。
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
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中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。
vb调用matlab程序步骤-wrl修改
先把VB,VC ,matlab都安装好。
例如建立一个 M函数文件,在matlab下调试好你的m文件,如:function Y=myfunction(a,b)Y=a+b;将myfunction.放入E:根目录下。
一.matlab下做com组件,生成dll文件1. 在matlab的command window里面敲入mex –setup (对matlab编译器配置命令下输入,注意有空格)Please choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers [y]/n? nSelect a compiler:[1] Borland C++ Compiler (free command line tools) 5.5[2] Borland C++Builder 6.0[3] Borland C++Builder 5.0[4] Compaq Visual Fortran 6.1[5] Compaq Visual Fortran 6.6[6] Intel C++ 9.1 (with Microsoft Visual C++ 2005 linker)[7] Intel Visual Fortran 9.1 (with Microsoft Visual C++ 2005 linker)[8] Intel Visual Fortran 9.0 (with Microsoft Visual C++ 2005 linker)[9] Intel Visual Fortran 9.0 (with Microsoft Visual C++ .NET 2003 linker)[10] Lcc-win32 C 2.4.1[11] Microsoft Visual C++ 6.0[12] Microsoft Visual C++ .NET 2003[13] Microsoft Visual C++ 2005[14] Microsoft Visual C++ 2005 Express Edition[15] Open WATCOM C++ 1.3[0] NoneCompiler: 11Your machine has a Microsoft Visual C++ compiler located atC:\Program Files\Microsoft Visual Studio. Do you want to use this compiler [y]/n? y 由于我VC 的安装目录正在C盘,因此我选择yPlease verify your choices:Compiler: Microsoft Visual C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n): yTrying to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2007a\mexopts.batFrom template: C:\PROGRA~1\MA TLAB\R2007a\bin\win32\mexopts\msvc60opts.batDone . . .2.设置matlab编译器,在matlab的command window里面敲入mbuild –setup (对matlab 编译器配置命令下输入,注意有空格)Please choose your compiler for building standalone MATLAB applications:Would you like mbuild to locate installed compilers [y]/n? nSelect a compiler:[1] Borland C++ Compiler (free command line tools) 5.5[2] Borland C++Builder 6.0[3] Borland C++Builder 5.0[4] Lcc-win32 C 2.4.1[5] Microsoft Visual C++ 6.0[6] Microsoft Visual C++ .NET 2003[7] Microsoft Visual C++ 2005[8] Microsoft Visual C++ 2005 Express Edition[0] NoneCompiler: 5Your machine has a Microsoft Visual C++ compiler located atC:\Program Files\Microsoft Visual Studio. Do you want to use this compiler [y]/n? yPlease verify your choices:Compiler: Microsoft Visual C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n): yTrying to update options file: C:\Documents and Settings\Administrator\ApplicationData\MathWorks\MATLAB\R2007a\compopts.batFrom template: C:\PROGRA~1\MATLAB\R2007a\bin\win32\mbuildopts\msvc60compp.batDone . . .--> "C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwregsvr C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcomutil.dll"DllRegisterServer in C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcomutil.dll succeeded--> "C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwregsvr C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcommgr.dll"DllRegisterServer in C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcommgr.dll succeeded2. 开一个dos窗口,进入/bin/win32目录下(matlabroot为你机器上matlab安装的路径),例如,我的安装目录在C盘,在dos下进入:C:\Program Files\MATLAB\R2007a\bin\win32 文件夹,输入:regsvr32 mwcomutil.dll,即对mwcomutil.dll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了。
VB调用Matlab的COM组件实现二者混合编程
VB调用Matlab的COM组件实现二者混合编程
孟力力;杨其长
【期刊名称】《电脑开发与应用》
【年(卷),期】2008(21)6
【摘要】Matlab具有强大的计算和图形处理能力,VB具有良好的用户界面,将二者有机结合,可开发出功能强大的软件.介绍了常见的五种方法.为了使开发的VB程序脱离Matlab环境,详细介绍了一种基于组件对象模型(COM)的Matlab与VB混合编程方法,以COM Builder为转换工具,将Matlab函数文件转换为COM组件,在VB程序中调用这个组件.并通过温室热环境模拟可视化模型的实现说明此方法.【总页数】3页(P24-26)
【作者】孟力力;杨其长
【作者单位】中国农业科学院农业发展与可持续发展研究所,北京,100081;中国农业科学院农业发展与可持续发展研究所,北京,100081
【正文语种】中文
【中图分类】TP311.11
【相关文献】
1.Delphi动态调用Matlab COM组件实现二者混合编程 [J], 吴小丽;丁维明;程力
2.VB调用Matlab制作的COM组件实现二者混合编程 [J], 张赛民;陈灵君
3.基于COM组件的VB与MATLAB混合编程实现振动信号处理 [J], 宋广东;刘统玉;王昌;霍佃恒;祁海峰
4.VB调用Matlab制作的COM组件实现二者混合编程 [J], 张赛民;陈灵君
5.VB调用Matlab制作的COM组件实现二者混合编程 [J], 张赛民;陈灵君
因版权原因,仅展示原文概要,查看原文内容请购买。
VB调用Matlab制作的COM组件实现二者混合编程
4、Matlab中处理返回结果并使用它进行进一步计算或可视化等操作。
四、注意事项
在使用基于COM的VB与Matlab混合编程时,需要注意以下几点:
1、确保VB COM接口和Matlab代码之间的兼容性。这通常需要对两种语言进 行适当的转换和映射。
2、COM接口的创建和实现可能需要耗费大量时间和精力,因此需要仔细规划 和设计。
4.处理异常
在调用Matlab函数时,你可能会遇到各种异常情况,例如参数类型不匹配、 参数数量不匹配等等。为了处理这些异常,你需要在VB代码中使用异常处理机制:
result = myMatlabObject.YourFunctionName(input1, input2)
' Handle the exception here
1、创建Matlab COM组件
首先,我们需要创建一个Matlab COM组件。打开Matlab,编写你希望从VB 调用的函数,例如一个用于图像处理的函数。然后在命令窗口中输入以下命令以 创建COM组件:
这将打开COM工具箱。在“新建项目”窗口中,选择“COM库”,然后输入库 名和位置。接下来,添加你的Matlab函数到库中。
在这个例子中,如果myMatlabObject.YourFunctionName(input1, input2) 抛出一个异常,那么这个异常会被Catch块捕获,并可以进一步处理。
5.在VB中使用返回值 在你的Matlab函数返回值后,你可以在VB中使用它。例如:
在这个例子中,如果result不是Nothing,那么你可以进一步使用这个结果。 6.错误检查和清理
1、创建 MATLAB函数:首先
例如: function obj = MyClass(x) function result = add(obj, y)
【环境】VS2013和MATLAB相互调用混合编程
【环境】VS2013和MATLAB相互调⽤混合编程Visual Studio和MATLAB混合编程,有两种⽅法: 1 MATLAB调⽤C程序; 2 VS调⽤MATLAB(⽬前见到的都是VS,其他编译器如codeblocks,或不提供这项功能);前⼀种是⽤MATLAB的mex命令调⽤VS或其他编译器,将以⼀定⽅式编写出的C⽂件编译成.mexw32(针对win32)或者.mexw64(针对win64),然后MATLAB就可以⽤调⽤动态链接库的⽅式,调⽤C程序。
这⼀过程中,只需要在安装好编译器的前提下,执⾏:mex -setup和mbuild -setup并按照提⽰按部就班地帮助MATLAB找到C编译器就可以了。
遇到MATLAB找不到Visual Stdio的情况时,可按照官⽅⽹站提供的⽅法,例如如果MATLAB找不到已安装的Visual Studio 2013,则在下载官⽅提供的⽂件,按照README的要求将⽂件复制到指定⽬录下即可。
README:The files* msvc120engmatopts.bat* msvc120opts.bat* msvc120opts.stpshould be copied to C:\Program Files\MATLAB\R2013a\bin\win64\mexopts .The files* msvc120compp.bat* msvc120compp.stpshould be copied to C:\Program Files\MATLAB\R2013a\bin\win64\mbuildopts .另⼀种是反过来,由VS去调⽤MATLAB,因为归根结底,许多底层的代码都依赖于C/C++语⾔,如果要使⽤MATLAB进⾏实时的数据处理,那么必然是使⽤C/C++(从操作系统内核、套接字,或者设备)获取数据,再调⽤MATLAB进⾏处理。
切⼊正题:1 ⾸先正确地安装好环境,如下是我使⽤的环境: x86 Windows 7 VS2013 MATLAB R2010a(安装⽬录为D:\MATLAB\R2010a)。
VB和Matlab混合编程方法——MatrixVB
VB和Matlab混合编程方法——MatrixVB
孟繁娟;杜永平
【期刊名称】《计算机技术与发展》
【年(卷),期】2008(18)5
【摘要】Matlab 是目前应用最广泛的数值科学计算语言,同时也是系统分析和仿真的强大工具,VB是目前使用最广泛的可视化编程工具.MatrixVB作为一种数学工具有效地将Matlab的强大功能融入到了Visual Basic中.通过一个具体的例子演示了如何在Visual Basic6.0中使用MatrixVB函数.结果显示,将Matlab的强大的计算功能与VB在图形用户开发方面的优势结合起来,有效地解决了复杂的雷诺方程的求解问题.
【总页数】3页(P76-78)
【作者】孟繁娟;杜永平
【作者单位】北京交通大学,机械与电子控制工程学院,北京,100044;北京交通大学,机械与电子控制工程学院,北京,100044
【正文语种】中文
【中图分类】TH133.31;TP319
【相关文献】
1.MATLAB与混合编程方法在伺服机构动态测试中的应用 [J], 施金花;王斌;张鑫彬;李文顶
2.VB与MATLAB相结合混合编程方法的研究 [J], 李俐玲
3.VB与Matlab的混合编程方法 [J], 冯莉;李巨;邓云华
4.Matlab、Access和混合编程方法的研究和应用 [J], 张良;何也熙
5.基于VB与Matlab的混合编程方法 [J], 隗燕琳;陈进明
因版权原因,仅展示原文概要,查看原文内容请购买。
【推荐下载】探究vb与matlab混合编程
[键入文字]
探究vb与matlab混合编程
探究vb与matlab混合编程
1 VB和Matlab混合编程的方法和算例由于Matlab本身只提供了Fortran、C语言的接口程序,所以无法直接实现VB对Matlab的调用.故Matlab与VB混合编程中需要解决的关键是如何实现在VB中调用Matlab. Matlab与VB混合编程的方法主要有下面4种.
1 1 ActiveX技术ActiveX技术是以组件对象模型(componentobject model,COM)技术为基础的一种应用程序开发技术和体系结构的总称,它是Microsoft公司提供的一种用于模块集成的新协议,它允许应用程序或组件控制另一个应用程序或组件的运行. Matlab5.
0以上的版本均支持ActiveX的嵌入.因为VB支持ActiveX自动化控制端协议,Matlab 支持ActiveX自动化服务器端协议,所以VB和Matlab的通信有两种:一种是自动化服务器,另一种是自动化控制器.本文重点探讨VB如何通过ActiveX接口将Matlab作为VB 的一个ActiveX部件,实现数值计算和图形显示.要实现这种功能,用户首先必须获得Matlab ActiveX对象在系统注册表中定义的名字─Matlab.Application.在所编写的程序中必须有如下的代码:Dim Matlab as ObjectSet.
1。
VB调用matlab
本来,VB与MATLAB混编的时候,我采用了VB+matrixVB的方法,常用的矩阵运算,是够用了的。
但是在处理矩阵的LU三角分解的时候,发现matrixVB的三角分解形为:PA=LU。
而非数值计算方法中的A=LU,想了半天,终于决定用matlab搞一下,发现在MATLAB中默认的LU分解就是matrixVB中的形式,于是狠狠心,自编函数,生成M文件,在MATLAB中终于实现了A=LU的三角分解,为了和VB混编,想到了com方法。
于是在MATLAB命令窗口中输入comtool ,调出combuilder,进行DLL 的生成,结果呢,就这一个小小的念头,折腾了我一天。
才终于成功,下面把我的心得给大家分享一下。
1.环境(操作系统XP ,MATLAB7.0 ,VC++6.0)开始,我并没有装VC++6.0,结果在编译DLL时总是提示找不到编译器,当然了是英文提示,大概有这么一句“Could not find the compiler "cl" on the DOS path。
”后来我装了VS2005,问题同上,最后才装了VC++6.0,并在MATLAB命令窗口中输入mbuild –setup……………….省略多行提示Would you like mbuild to locate installed compilers [y]/n?y(在此输入y)Select a compiler:[1] Lcc C version 2.4 in G:\MATLAB6P5\sys\lcc[2] Microsoft Visual C/C++ version 6.0 in G:\Microsoft VisualStudio[0] NoneCompiler: 2(在此输入2)…………省略多行提示Are these correct?([y]/n): y(在此输入y)然后就可以成功的编译DLL了。
我终于明白,原来这个编译器也是需要和MATLAB的版本匹配的。
VB调用Matlab制作的COM组件实现二者混合编程
文章编号:1007-757X(2006)04-0052-03VB调用Matlab制作的COM组件实现二者混合编程张赛民,陈灵君摘 要:Micros ft Visual Basic在编程可视化、开发友好界面方面,显得十分方便,而M AT LAB提供很多数学库可以实现科学技术计算。
充分利用M AT LAB强大的运算及显示功能和VB开发界面友好的特点,将二者有机结合,可以开发出复杂的、界面友好的人机交互处理软件。
同时,能大大加快软件开发的进度,缩短源代码,提高代码质量及软件的稳定性。
为了开发的VB程序脱离M AT LAB环境,利用M AT LAB制作C OM控件供VB调用是实现此功能的有效方法。
熟练掌握这一技术,将使编程工作变得轻重自如。
关键词:VB;M AT LAB;混合编程;C OM组件中图分类号:TP312 文献标识码:A1 问题的提出Micros oft Visual Basic是由微软公司开发的在Windows操作平台上的主力编程语言之一,由于它避开了C++编程过分繁锁和抽象的缺点,因而一经推出就风靡全球,目前全世界大约有几百万程序员在使用VB编程,是一种十分强大和有生命力的Windows编程语言。
虽然VB语言容易上手,界面容易设计,但是对于数值计算方面其能力欠佳。
与之相比,M AT LAB是新近发展起来的一种深受广大编程人员喜爱的数学工具软件。
M AT LAB语言可以提供与矩阵有关的强大的数据处理和图形显示功能,为软件开发人员在程序编制过程中实现数值计算和图形显示新添了又一行之有效的开发平台。
但是,M AT LAB的界面功能比较弱,给友好界面的开发应用带来不便。
为了提高工程计算软件的开发效率和质量,可采取把VB 可视化编程语言和M AT LAB工具相结合的办法,充分利用M AT LAB的运算功能和VB的开发界面方便的特点进行混合编程,即用VB来设计界面作为主程序,调用M AT LAB写的子程序,以此开发出高质量、高性能的工程计算软件系统当属首选方案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)。
但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。
(3)借助VisualC++与MATLAB的接口,将MATLAB的程序文件(.M)编译为动态链接库(.DLL),VB在代码中调用生成的.DLL中的函数,实现算法,便于用户脱离MATLAB环境使用。
由于算法部分采用C++语句,运行速度较快,可应用于实时运算。
这种方法对开发者在设置和编程上有一定要求,本文将详细阐述具体实现步骤。
其基本思路如图1所示。
第一步,编写M文件。
在MATLAB中打开Editor,按照MATLAB程序格式输入代码,实现算法,调试成功。
注意:M文件必须以Function开始,避免在VC++中出现转换错误。
第二步,使用MATLAB6.0新提供的编译插件MATLABAdd-in在VC++中转换为C文件。
在转换前做好MATLAB与VC++的接口连接。
步骤如下:·在MATLAB中运行“mex-setup”,选择MicrosoftVisualC/C++version6.0选项,安装MATLABAdd-in文件到VC++目录,确认;接着运行“mbuild-setup”,选择MicrosoftVisualC/C++version6.0作为本地默认编译器;然后在MATLAB下运行“cd prefdir”和“mccsavepath”命令,MATLABAdd-in可以脱离MATLAB环境找到MATLAB路径。
·在VC++中选择“工具 tools->定制(customize)->附加项和宏文件 Add-insandMacroFiles页”,选中“MATLABAdd-in”。
这样,在VC++工具栏出现MATLABAdd-in图标,在VC++
新建工程对话框中会出现“MATLABProjectWizard”。
至此连接工作完成。
·打开VC++,在新建工程中选择“MATLABProjectWizard”,按照提示,选择“ShalledM-dll”,输入M文件位置,VC++开始转换。
如果M文件没有错误,在工程文件夹中会生成一系列.C文件。
其中与M文件同名的.C文件即为转换的C代码。
第三步,编译DLL文件(强烈建议不要对刚刚生成的C代码作任何修改)。
选择“编译”菜单,构建.DLL文件,在文件夹中会生成与工程名相同的DLL文件。
第四步,在VB中调用DLL文件。
在第二步生成的C代码中找到所要的接口函数,注意大小写,记下函数名。
在VB中使用Declare语句声明这个函数。
在窗体的“通用-声明”输入如下语法:
DeclareFunction/Sub<函数名>Lib“<dll文件名>”Alias“<函数名>” <参数表>as<type>(具体语法可参看VB使用手册)。
在程序代码中直接调用声明的函数即可。
需要注意的是函数调用过程中的参数传递问题。
由于VB和C的数据类型以及参数传递形式不太一样,传递不当,可能会造成调试困难。
特别是MATLAB中用到的大量矩阵(数组)参数,调用需十分当心。
本文在下面例子中采用文件方式传递参数,利用VB和MATLAB的文件读写功能传递数组参数,对于实时性要求不高的应用,可以方便稳妥地实现数据传递。
2应用举例
在VB中利用随机数生成16个10以内的整数,作为一个信号序列,利用MATLAB的快速傅立叶变换函数(FFT())对序列进行变换,再将变换结果传递回VB,并显示在窗体上。
在MATLAB中编辑好M文件(test.m),实现读取序列文件及FFT并写回序列文件,调试成功。
代码如下:
functiont
fid=fopen 't.txt' 'rt+' %以读写文本方式打开文件
acount =fscanf fid '%d' %文件以整数格式读入矩阵a
m=fft a count %FFT运算
frewind fid %文件指针指向文件头
fprintf fid '%f\n' m %向文件写入矩阵m
fclose fid
按照前述步骤在VC++中转换为test.c文件,找到接口函数,本例为mlfTest()。
voidmlfTest(void){
mlfEnterNewContext(0,0);
Mtest();
mlfRestorePreviousContext(0,0);
}
编译生成test.dll文件。
在VB中生成随机序列并写入文件:
PrivateSubCommand1_Click()
Randomize
DimiAsInteger
DimaAsInteger
DimbAsString
Text1.Text=″″
OpenApp.Path&″\t.txt″ForOutputAs#1
Fori=1To16
a=Int(10*Rnd)
Print#1,LTrim(a)
b=b&Str(a)&Chr(13)&Chr(10)
Nexti
Text1.Text=b
Close#1
EndSub
声明mlfTest()函数:
PrivateDeclareSubmlfTestLib″G \test\dll\dll.dll″
调用该函数的事件代码:
PrivateSubCommand2_Click()
MlfTest'调用函数
EndSub
本例中未向函数传递参数,也无需函数返回运算结果,故采用调用子程序过程(Sub)方式直接调用。
结果由VB读取文件获得:
PrivateSubCommand3_Click()
Dimstr1AsString
Dimstr2AsString
Text2.Text=″″
OpenApp.Path&″\t.txt″ForInputAs#1
DoWhileNotEOF 1
LineInput#1 str1
str2=str2&str1&Chr(13)&Chr(10)
Loop
Text2.Text=str2
Close#1
EndSub
本例在WindowsXP、VB6.0、VC++6.0、MATLAB6.5下调试通过。
VB与MATLAB的混合编程,可以脱离MATLAB环境运行,有利于程序发布及使用。
通过二者结合,减少了设计算法的时间,降低了编程难度,同时兼顾了代码安全和界面友好。
程序界面如图2所示。