vb调用matlab的四种方法
关于vb,vc调用matlab的m.文件生成的dll.文件

Matlab函数转换为VB可用的DLLMatlab函数转换为VB可用的DLL段晓君摘要:一种利用Matcom将Matlab函数转换为VB中可用的动态链接库的方法,操作简单易行。
关键词:Matlab函数动态链接库DLL M-文件VB语言1 Matlab简介Matlab是MathWorks公司开发的一种工程计算语言。
它是一个交互系统,在Matlab 中的基本数据元素是一个不要求维数的复矩阵。
用Matlab可解决很多工程计算问题,特别是涉及到矩阵和矢量形式的问题。
Matlab是一个高度集成的语言环境,在它的界面下可以编写程序、运行程序并可进行跟踪调试。
对于广大的工程技术人员和科学研究人员来说,Matlab不失为一种很好的工具。
Matlab也有局限性,一般它不能脱离Matlab集成环境工作;而且编写界面的功能比较弱。
Matcom是一个从Matlab到C++的编译器,它可以节省用户的运算时间和内存要求。
MathTools公司利用Matcom技术编写了Mideva工具软件,它可以借用C++编译器将Matlab下的M-文件转换为可被Visual Basic、Excel以及Delphi调用的DLL 动态链接库或者是独立的可执行文件。
本文就M-文件到DLL的转换以及在VB中调用这一类DLL 的2个问题做了一些探讨。
文中针对Matlab5.0、VC5.0、VB5.0、Matcom4.0或相应的更高版本的软件进行了讨论。
2 M-文件到DLL的转换要将一个m-文件编译成DLL,需进行如下操作:启动运行Matcom4的Mideva,点击菜单File/Compile to dll,选择要转换的m-文件(该文件应该是能够作为函数被其它集成环境调用的m-文件,假设文件名为yourfile.m)。
值得注意的是,Mideva对M-文件有一定的要求,即该文件必须是1个函数,如果要编译没有输入也没有输出的脚本文件,可以先在Matlab中将它编辑成无输入无输出的函数,再按照上述操作进行转换。
VB实现对MATLAB程序的调用

VB 实现对MATLAB 程序的调用The Method to Use MATLAB in VB Software周竹生 陈灵君 张赛民(中南大学 长沙 410083)【摘 要】 充分利用M ATLAB 强大的运算及显示功能和VB 开发界面友好的特点,将二者有机结合,可以开发出复杂的、界面友好的人机交互处理软件。
重点介绍了应用VB 和M AT LAB 进行混合编程的几种技术,熟练掌握这些技术,将使编程工作变得轻松自如。
【关键词】 VB,MAT LAB,混合编程,ActiveX 技术,DLLABSTRACT T aking full adv ant age o f features of st ro ng capability in co mputing and displaying of M AT L AB ,and featur es o f fr iendly int er face of V B,and or ganizing the tw o to ols pr oper ly ,any co mplicated pro cessing so ftw ar e w ith friendly inter activ e inter -face may be ex ploit ed,this paper discusses thr ee hybrid pr og ramming metho ds o f using M AT L AB in VB so ftwa re.Having these techniques at o ne's fing er ends ,the pr o gr amming wo rk w ill be easy .KEYWORDS V B,M A T L A B,hy br id pr og ramming,A ctiv eX technique,DL L1 问题的提出M icrosoft Visual Basic 是由微软公司开发的在Window s 操作平台上的主力编程语言之一,由于它避开了C ++编程过分繁琐和抽象的缺点,同时又能实现大多数W indo w s 编程目的,因而一经推出就风靡全球,目前全世界大约有几百万程序员在使用VB 编程,是一种十分强大和有生命力的Window s 编程语言。
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混合编程接口的方法

摘要: 为充分发挥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混合编程的方法

相关图片如下:VB与MA TLAB混合编程探讨文章作者:朱志松郭晓丽朱小松文章类型:设计应用文章出处:电子技术应用--------------------------------------------------------------------------------摘要:介绍了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语言,特别对图形的处理非常方便,弥补了其他方法在图形处理上的弱点。
vb与matlab接口

VB和Matlab/Simulink的接口方法:AttributeVB_Name = "Form1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalseDim result As StringDim Matlab As ObjectSet Matlab = CreateObject("Matlab.Application")Private Sub Command1_Click()Matlab.execute (save "Text1")End SubPrivate Sub Command2_Click()Text2.Text = Matlab.execute("Test1")result = Matlab.execute("print-dbitmap")Imagel.Picture = Clipboard.GetDataEnd Sub基于COM组件的VB与MA TLAB接口编程摘要:针对VB和MA TLAB接口编程问题,本文提出一种基于COM组件的VB与MA TLAB接口编程方法。
并以具体的例子给出了这种方法的应用过程,实现了VB可视化界面和MATLAB信号分析及图形显示。
关键词:COM组件,VB,MA TLAB,接口编程1引言MA TLAB是Mathworks公司开发的科学计算环境,具有强大的计算绘图能力,并提供了大量的函数库,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。
但它的缺点是界面开发能力差,代码运行效率低。
V isual Basic是Microsoft公司推出的一款面向对象的应用程序开发工具。
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)。
但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。
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)。
但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、借助ActiveX部件Microsoft把所有以COM为基础的技术统称为ActiveX技术。
自动化是大多数ActiveX技术的基础,它可使解释性的宏语言(如VB)能够在不了解应用程序实现细节的情况下控制自动化对象。
Matlab实现了ActiveX自动化服务支持,在VB下通过ActiveX自动化接口可将Matlab作为Visual Basic语言的一个ActiveX部件调用。
Matlab ActiveX自动化服务的功能主要包括在Matlab工作空间执行Matlab命令,以及直接从工作空间存取矩阵等,下面列出了Matlab自动化服务支持的几个主要方法,其参数和返回值的类型采用ActiveX自动化协议所定义的与语言无关的类型描述:● BSTR Execute([in] BSTR Command);BSTR表示宽字符串类型,它与VB存储字符串所采用的数据格式相同。
该方法接收字符串命令并在Matlab中执行,将结果以字符串形式返回。
● void GetFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in, out] SAFEARRAY(double)* pr,[in, out] SAFEARRAY(double)* pi);该方法从指定的工作空间检索一个完整的一维或二维的实型或虚mxArray,其实部和虚部被分别存放到两个单独的Double型数组中。
● void PutFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in] SAFEARRAY(double) pr,[in] SAFEARRAY(double) pi);该方法将一个mxArray放入指定的工作空间。
各参数的含义及调用方法与GetFullMatrix方法类似。
示例代码如下:1Dim Matlab As Object ’声明对象2Dim MReal1(5,5) As Double ’声明存放实部的Double型数组3Dim MImag() As Double ’声明存放虚部的Double型数组4Set Matlab=CreateObject(“Matlab.Application”) '初始化对象5Matlab.Execute(“a=hilb(5)”) '执行Matlab命令6Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag) '将结果分别存入实部、虚部数组复制代码二、借助DDE技术DDE(Dynamic Data Exchange)允许Microsoft Windows应用程序通过交换数据实现彼此间的通信。
应用程序间彼此通信要先建立一个DDE会话,对会话进行初始化的应用程序称为客户端(Client),对Client端作出响应的应用程序称为服务器(Server)。
图1描述了Matlab 作为服务器时与其他应用程序的通信机制。
其中,DDE功能函数既可以由应用程序提供,也可以由Matlab引擎库提供。
初始化会话时,客户端应用程序必须指定两个参数service name(服务器应用程序的名称)和topic(会话主题)。
下面的示例说明了VB与Matlab建立并完成DDE会话的全过程:78说明: T extInput是输入文本框,T extOutput是输出文本框。
在T extInput中输入Matlab命令回车后,由Matlab在后台执行并将结果返回给TextOutput显示。
9Sub T extInput_KeyPress(KeyAscii As Integer)10If KeyAscii = vbKeyReturn then’初始化TextInput与Matlab间的DDE会话11TextInput.LinkMode = vbLinkNone12TextInput.LinkTopic = “MATLAB|Engine”13TextInput.LinkItem =“EngEvalString”14TextInput.LinkMode = vbLinkManual15szCommand = TextInput.Text’执行Matlab命令16TextInput.LinkExecute szCommand17TextInput.LinkMode = vbLinkNone’初始化T extOutput与Matlab间的DDE会话18TextOutput.LinkMode = vbLinkNone19TextOutput.LinkTopic = “MATLAB|Engine”20TextOutput.LinkItem =“EngStringResult”21TextOutput.LinkMode = vbLinkManual’返回执行结果并显示22TextOutput.LinkRequest23TextOutput.LinkMode = vbLinkNone24End If25End Sub复制代码三、通过M文件Matlab产生的M文件不能直接在VB中调用,可利用mcc将M文件直接编译成.EXE文件,然后在VB中声明下面三个API函数,最后使用Shell命令即可实现VB与Matlab的无缝集成。
1. 用mcc生成独立的外部应用程序。
可使用如下两种命令mcc -p file.m 或mcc -m file.m2. 在VB中声明调用的三个API函数:● Declare Function WaitForSingleObject Lib “kernel32”(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long● Declare Function CloseHandle Lib “kernel32”(ByVal hObject As Long) As Long● Declare Function OpenProcess Lib “kernel32”(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long,ByVal dwProcessId As Long) As Long3. 示例代码2627Dim lT ask As Long, lret As Long, lHandle As Long’执行file.exe文件28lT ask = Shell(“file.exe”, vbNormalFocus)29lHandle = OpenProcess(SYNCHRONIZE, False, lT ask)’等待进程执行完毕30lret = WaitForSingleObject(lHandle, INFINITE)31lret = CloseHandle(lHandle)’ file.exe文件执行完毕后,继续执行应用程序32……复制代码通过以上编码,应用程序可以在执行过程中调用.EXE完成特定的计算或图形功能后,再继续其执行过程,从而实现与Matlab的集成。
四、引入MatrixVBMatrixVB是MathWorks针对VB提供的一个Matlab库,它提供了600多个函数,包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能等,为VB提供了强大的功能扩展。
在VB中使用该数学工具包可避免重复性劳动,从而减少开发人员实现算法和界面设计的困难。
MatrixVB是一个独立的产品(可以从得到),其使用十分方便。
MatrixVB 安装完成后,只需在VB工程中引用Mmatrix即可。
工业生产中经常需要对采集到的原始信号进行分析,并对分析结果进行实时的图形化显示,下面通过在VB中引用Mmatrix来实现这一功能。
示例代码如下:3334Dim ax as Variant ’声明坐标轴35Private Sub Form_Resize()36vbrefresh ax ’刷新坐标轴37End Sub38Private Sub Form_Load()39ax = vbaxes(Form1.hWnd) ’将坐标轴置于窗体40Call Form_Resize41End Sub42Private Sub Command1-Click()43Dim I,C As Matrix ’声明向量44Dim m As Integer45’从数据库中取原始信号存入一维向量I,取其对应的碳含量存入一维向量C 46’m为向量I、C的元素个数47Call Icheck ( I , C , m ) ’调用校正函数48End Sub49Private Sub Icheck (I As Variant, C As Variant, ByVal m As Integer)50Dim II,CC,Z As Matrix51Dim a0,a1,a2 As Double52II = zeros(m,1)53CC = zeros(m,1)54II(colon(1,m)) = I(colon(1,m))55CC(colon(1,m)) =C(colon(1,m))’多项式拟和求解56Z = polyfit ( II, CC, 2 ) ’2 说明用二项式拟和57a0= Z.r1(1) ’a0为二次项系数58a1= Z.r1(2) ’a1为一次项系数59a2= Z.r1(3) ’a2为0次项系数60Clear axes ’清除坐标轴61T = Sort ( II ) ’对原始信号排序,以确定作图区间62J = Linspace (T(1).r1(1),T(1).r(m),20) ’横坐标向量63Cuv = plus (plus (times (a0,times (X,X) ),64times (a1,X) ),a2) ’纵坐标向量65Tmp = plot (J,Cuv) ’绘制曲线66Hold (“on”)67Tmp = plot (II, CC,“r.”) ’绘制点68Hold (“off”)69End Sub复制代码执行以上代码,结果如图2所示:总结以上几种方法对于Matlab与VB的集成都是行之有效的,但在实际应用中究竟采用哪一种方式应视具体情况而定。
前两种方式比较适合Client/Server模式,后两种方式则应视应用系统的具体要求来做选择,相比较而言,借助M文件在执行效率上略高一筹,而引入MatrixVB 在使用上更为方便。
总而言之,Matlab与VB集成可大大提高开发效率,对于解决工程问题是十分有意义的。