浅谈VB与MATLAB相结合的三种方法

合集下载

五种VB与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 程序的一个一维数组或二维数组中。

MATLAB与VB混合编程技术研究

MATLAB与VB混合编程技术研究

邮局订阅号:82-946360元/年技术创新软件时空《PLC技术应用200例》您的论文得到两院院士关注MATLAB与VB混合编程技术研究ResearchofthemergingprogrammingtechnologyofVBandMATLAB(暨南大学计算机科学系)谭炎张凌燕Tan,YanZhang,Lingyan摘要:着重探讨了在VB应用程序中集成MATLAB实现程序优化的四种方法,即利用MatrixVB、调用DLL动态链接库、应用Active自动化技术和动态数据交换技术,并分析了集成过程中的关键问题及其基本步骤。

这种混合编程实现了VB的可视化界面与MATLAB强大的数值分析能力的结合。

关键词:VB;MATLAB;动态数据交换;ActiveX;动态链接库中图分类号:TP311文献标识码:AAbstract:ThispapermainlyfocusesondiscussingthetechniquesofthetechnologyoftheVBapplicationsintegratingwithMATLAB.Therefore,therelatedpivotalprotocolsandimplementationsteps,thesuperiorityandlimitationofeachmethodareoffered.Throughthismethod,wecanintegratethevisualinterfaceofVBandtheabilityofanalysisofMATLAB.Keywords:VB;MATLAB;DDE;ActiveX;DLL文章编号:1008-0570(2006)05-3-0247-031引言在工业生产和科研工作中,经常会遇到复杂数据信息的处理问题,往往需要大运算量的矩阵计算以及对分析结果进行实时、直观的图形化显示。

VB是Windows操作系统下优秀的可视化编程语言,在用户界面设计和快速开发等方面具有独特的优势。

【推荐下载】关于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混合编程

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混合编程

n n Obe t d l e t jcMo e, 部件对象 模型) 使得 软件部件 在网络环境 中进行 交互的技 术集, 它与具体的编程语言 无关 。Acie t X的 v 特点就 是使不同的软件对 象可 以跨进程、 跨平台并能在网络上 进行 交互 。MalbAcie 自动化 服 务的 功能 主要包括 在 t t X a v Malb工作空间执行 Malb命令 . t a t a 以及直接 从工作 空间存取 矩阵等 ,下面列 出了 Malb自动化 服 务支持的 几个 主要方 t a
Acie 是 M irs f 提 出 的 一 组 使 用 CO ( mp - t X v co ot M Co o
的请求和接 受者。通过 DDE方式建立的数 据连接通道是双 向
的 , C in” 但 能 读 取 “ ev r中 的 数 据 , 能 对 其 进 行 修 “ l t不 e S re” 还
【 摘 要 】为充分 发挥Maa 与v 各自 势, tb B 的优 将二者结合 进行工 l 起来 程应用 软件的 发。 介绍了 开 本文 五种V B与
M A AB混舍 编程 接 口的方 法 , 对各 方 法 性 能 的 优劣 进 行 了 比较 和 评 价 。 TL 并
【 关键词 】Maa;iaBs;cvxD EMai BD LC M tbVs lac te ;D ; tx ;L ;O l u iA i rV 【 中图分类号】 T 3 【 P2 文献标识码】 A 【 文章编号】 10—27(060— 08 2 03 6320)5 07—0
Malb使 命 令 行 窗 口 最 大 化 , 体 调 用 如 下 : al t b t a 具 Cl mal - a
可视化 三大基本功能于一体 的 , 功能强 大、 操作简单 的语言 , 是

VB调用MATLAB混合编程教程(完整版)

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实现混合编程

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混合编程

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

VB与MATLAB混合编程研究与实现

VB与MATLAB混合编程研究与实现

VB与MATLAB混合编程研究与实现摘要:介绍了VB与MATLAB混合编程的5种方法,分别利用com 组件技术与MatrixVB完成了VB与MA TLAB混编,实现了图像的绘制。

从两种实验结果来看,这两种方法占用计算机内存小,且编程语言简单,充分利用了VB与MATLAB的特点,简化了编程过程。

关键词:VB;MATLAB;com组件;MatrixVB0引言VB具有方便的资源文件集中管理模式、开发周期短、开发环境友好等特点。

MATLAB具有强大的计算机绘图能力,并且提供大量的数据库,但是界面开发能力差、代码运行效率低。

将VB与MATLAB 的特点结合起来,运用VB与MATLAB混合编程实现仿真,使两者相得益彰,不失为一种有益的尝试。

1VB与MATLAB接口编程方法VB与MATLAB混合编程有多种方法,各有优缺点,主要有下面几种方法。

1.1利用ActiveX技术ActiveX自动化(OLE自动化)协议是一种允许一个应用程序(控制端)去控制另一个应用程序(服务器端)的协议。

在VB下通过ActiveX自动化接口可将MATLAB作为Visual Basic语言的一个ActiveX部件调用。

但是这种方法不能脱离MATLAB运行环境,占用计算机内存较大。

1.2利用可执行文件技术这种方法将MATLAB的运算模块生成可执行的exe文件,然后在VB运行环境下调用。

这种方法占用内存较小,运行效率较高。

1.3利用MatrixVB技术MatrixVB 是MathWorks 公司为VB 开发的插件,插件增强了VB 绘图和计算的函数集合。

它包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能,用来补充VB 本身内建函数和图形处理的不足。

这种方法运行效率高、占用内存小。

1.4利用动态数据交换(DDE)技术动态数据交换(DDE)是在Windows环境下支持客户/服务器计算模式的重要技术。

由于VB支持DDE客户端功能,MA TLAB提供了DDE服务功能,因此,利用VB和MATLAB的动态数据交换能力,可以实现在VB应用程序中调用MATLAB。

MATLAB与VB混合编程方式简易教程

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混合编程探讨

VB与MATLAB混合编程探讨

VB与MATLAB混合编程探讨介绍了VB与MATLAB混合编程的办法,二者结合可以充分利用VB的便利快捷和MATLAB软件工具箱的强大功能MATLAB是MathWorks公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库工具箱,几乎涵盖了全部的工程计算领域,被誉为“演算纸”式的工程计算工具但是MATLAB语言是一种说明执行的脚本语言,运算速度较慢是一个比较突出的问题Visual Basic作为一门易学易用的编程语言,受到无数工程技术人员的青睐,其执行速度相对较快,界面友好因此实现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)借助Visual C++与MATLAB的接口,将MATLAB的程序文件(.M)编译为动态链接库(.DLL),VB在代码中调用生成的.DLL中的函数,实现算法,便于用户脱离MATLAB环境用法因为算法部分采纳C++语句,运行速度较快,可应用于实时运算这种办法对开发者在设置和编程上有一定要求,本文将具体阐述详细实现步骤其基本思路1所示第一步,编写M文件在MATLAB中打开Editor,根据MATLAB程序格式输入代码,实现算法,调试胜利注重:M文件必需以Function开头,避开在VC++中浮现转换错误其次步,用法MATLAB6.0新提供的编译插件MATLAB Add-in在VC++中转换为C文件在转换前做好MATLAB与VC++的接口衔接步骤如下:在MATLAB中运行“mex -setup”,挑选Microsoft Visual C/C++ version 6.0选项,安装MATLAB Add-in文件到VC++名目,确认;接着运行“mbuild -setup”,挑选Microsoft Visual C/C++ version 6.0作为本地默认编译器;然后在MATLAB下运行“cd prefdir ”和“mccsavepath”指令,MATLAB Add-in可以脱离MATLAB环境找到MATLAB路径在VC++中挑选“工具tools ->定制(customize)->附加项和宏文件?Add-ins and Macro Files 页”,选中“MATLAB Add-in”这样,在VC++工具栏浮现MATLAB Add-in图标,在VC++新建工程对话框中会浮现“MATLAB Project Wizard”至此衔接工作完成打开VC++,在新建工程中挑选“MATLAB Project Wizard”,根据提醒,挑选“Shalled M-dll”,输入M文件位置,VC++开头转换假如M文件没有错误,在工程文件夹中会生成一系列.C文件其中与M文件同名的.C文件即为转换的C代码第三步,编译DLL文件(剧烈建议不要对刚刚生成的C代码作任何修改) 挑选“编译”菜单,构建.DLL文件,在文件夹中会生成与工程名相同的DLL文件第四步,在VB中调用DLL文件在其次步生成的C代码中找到所要的接口函数,注重大小写,登记函数名在VB中用法Declare语句声明这个函数在窗体的“通用-声明”输入如下语法:Declare Function /Sub Lib “”Alias “” as (详细语法可参看VB用法手册)在程序代码中挺直调用声明的函数即可需要注重的是函数调用过程中的参数传递问题因为VB和C的数据类型以及参数传递形式不太一样,传递不当,可能会造成调试困难特殊是MATLAB中用到的大量矩阵(数组)参数,调用需非常小心本文在下面例子中采纳文件方式传递参数,利用VB和MATLAB的文件读写功能传递数组参数,对于实时性要求不高的应用,可以便利妥帖地实现数据传递2 应用举例在VB中利用随机数生成16个10以内的整数,作为一个信号序列,利用MATLAB的迅速傅立叶变换函数(FFT())对序列举行变换,再将变换结果传递回VB,并显示在窗体上在MATLAB中编辑好M文件(test.m),实现读取序列文件及FFT并写回序列文件,调试胜利代码如下:function tfid=fopen't.txt''rt+' %以读写文本方式打开文件account=fscanffid'%d' %文件以整数格式读入矩阵am=fftacount %FFT运算frewindfid %文件指针指向文件头fprintffid'%f\n'm %向文件写入矩阵mfclosefid根据前述步骤在VC++中转换为test.c文件,找到接口函数,本例为mlfTest()void mlfTest(void){mlfEnterNewContext(0,0);Mtest();mlfRestorePreviousContext(0,0);}编译生成test.dll文件在VB中生成随机序列并写入文件:Private Sub Command1_Click()RandomizeDim i As IntegerDim a As IntegerDim b As StringText1.Text = ″″Open App.Path & ″\t.txt ″ For Output As 1 For i = 1 To 16 a = Int(10 * Rnd)Print 1, LTrim(a)b = b & Str(a) & Chr(13) & Chr(10)Next iText1.Text = bClose 1End Sub声明mlfTest()函数:Private Declare Sub mlfTest Lib ″G\test\dll\dll.dll″调用该函数的大事代码:Private Sub Command2_Click()MlfTest '调用函数End Sub本例中未向函数传递参数,也无需函数返回运算结果,故采纳调用子程序过程(Sub)方式挺直调用结果由VB读取文件获得:Private Sub Command3_Click()Dim str1 As StringDim str2 As StringText2.Text = ″″Open App.Path & ″\t.txt″ For Input As 1Do While Not EOF1Line Input 1 str1str2 = str2 & str1 & Chr(13) & Chr(10)LoopText2.Text = str2Close 1End Sub本例在Windows XP VB6.0 VC++6.0 MATLAB6.5下调试通过 VB与MATLAB 的混合编程,可以脱离MATLAB环境运行,有利于程序发布及用法通过二者结合,削减了设计算法的时光,降低了编程难度,同时兼顾了代码平安和界面友好程序界面2所示。

VB与MATLAB结合

VB与MATLAB结合

Dim Matlab as object ‘定义Matlab为对象变量 Set Matlab = Createobject(“Matlab.Application”) ‘ 创 立 MATLAB 的 ActiveX对象
创建了MATLAB的ActiveX 对象后,就可以使用这个对象的各种方法来 调用MATLAB了。该对象提供了以下几个主要方法。 ①Execute(command as string): 执行Execute方法将调用MATLAB执行一条 由command字符串决定的MATLAB命令,同时返回命令的执行情况。 ②GetFullMatrix(Name,Workspace,Array(double)*real,Array(double)* ieal) 该方法将指定的MATLAB工作空间中的一个一维或二维数组送到VB程序中 ,Name指定了MATLAB中的矩阵变量名,Workspace指定了该矩阵所在的工作 空间,real和ieal分别是数组的实部和虚部。 ③ PutFullMatrix(Name,Workspace,Array(double)*real,Array(double)* ieal) 该方法将VB程序中的一个一维或二维数组传送到指定的MATLAB工作空间 中。
举例:
Dim p() As Double Dim image() As Double Call matlab.putfullmatrix("PT", "base", p, image) matlab.Execute ("B=inv (PT) ") Call matlab.getfullmatrix("B", "base", p, image)
1. 掌握VB中文件的概念、种类及其结构;

VB调用Matlab制作的COM组件实现二者混合编程

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)

【推荐下载】探究vb与matlab混合编程

【推荐下载】探究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。

基于VBMATLAB混合编程数据库图形显示方法论文

基于VBMATLAB混合编程数据库图形显示方法论文

基于VB与MATLAB混合编程数据库图形显示方法摘要:针对以往数据库中图形显示方法工作量大,数据库结构复杂,或者数据文件庞大,造成在vb环境下开发的应用程序执行效率低等问题,提出了基于vb与matlab混合编程的数据库图形显示方法,采用matrixvb插件进行数据库中数据图形显示的开发。

在实验数据库中的应用表明,方便了对库中数据的查询、分析与使用,提高了效率,同时优化了数据库结构。

abstract: it is difficult to display the data in the database because of complex structure or large data file. it is inefficient for the program based on vb to display the data in the database. we put a new figure display method based on vb and matlab combined programming.we use matrixvb to display. it is convenient for data query and analyzing in the database. it had been raised the efficiency and optimized the structure in the database of characteristic.关键词:数据库;图形显示;混合编程;matrixvbkey words: database;figure display;combined programming;matrixvb中图分类号:tp392 文献标识码:a 文章编号:1006-4311(2012)32-0196-020 引言实验数据库系统采用sql server,并使用vb进行应用程序的开发,主要任务是存储实验中积累的实测数据。

MATLAB与VB集成

MATLAB与VB集成
TextOutput.LinkTopic = “MATLAB|Engine”
TextOutput.LinkItem =“EngStringResult”
TextOutput.LinkMode = vbLinkManual
’返回执行结果并显示
TextOutput.LinkRequest
BSTR表示宽字符串类型,它与VB存储字符串所采用的数据格式相同。该方法接收字符串命令并在Matlab中执行,将结果以字符串形式返回。
● void GetFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in, out] SAFEARRAY(double)* pr,[in, out] SAFEARRAY(double)* pi);
● 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 Long
’声明存放虚部的Double型数组
Set Matlab=CreateObject(“Matlab.Application”) ’初始化对象
Matlab.Execute(“a=hilb(5)”)
’执行Matlab命令
Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag)
Matlab ActiveX自动化服务的功能主要包括在Matlab工作空间执行Matlab命令,以及直接从工作空间存取矩阵等,下面列出了Matlab自动化服务支持的几个主要方法,其参数和返回值的类型采用ActiveX自动化协议所定义的与语言无关的类型描述:
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浅谈VB与M AT LAB相结合的三种方法樊金荣① 黎洪生② 摘 要 本文分别介绍了在VB中调用M atlab的三种方法:利用动态链接库DLL、利用动态数据交换D EE以及利用A ctivex自动化技术。

并以具体的例子给出通过这些方法实现了VB的可视化界面与M atlab强大的数值计算和图形显示能力的结合。

关键词 客户 服务器 M atlab DLL DD E A ctivex 技术一、前言V isual Basic是由M icro s oft公司开发的在W indow s95 98平台上的一种十分强大和有生命W indow s编程语言之一,具有易学易用、编程简单、程序集成化程度高及界面可视化又能实现大多数W indow s编程目的,因而一经推出就风靡全球然而,VB提供的数学函数及其有限,因而使之在数值计算和图形显得力不人心。

M atlab是M ath W o rk s公司开发的一种工程计算语言。

用这个交互系统可以解决很多工程计算问题,特别当涉及到矩阵和矢量形式的问题时,M atlab提供了强大的矩阵处理的和绘图功能。

显然,将二者结合起来,能实现VB 可视化界面下运用M A TLAB强大的数值计算和图形显示,使VB编更加灵活快洁。

二、采用动态链接库DLL方法M atcom是一个从M A TLAB到C++的编译器,它可以节省用户的运算时间和内存要求。

M ath too ls公司利用M atcom4技术编写了M ideva工具软件,它可以借用C++编译器将M atlab下的M-文件转换为可被VB调用的DLL或独立瓣可执行文件。

VB中要使用DLL,必须在VB工程中包含DLL的声明文件(即模块文件),同时还要将DLL放在工程文件所在的目录下。

如下操作可以一个M-文件编译成DLL:启动M atcom4的M ideva,点菜单F ile Comp ile,选要转换的M-文件应该是能作为函数被其他集城环境调用的M-文件,设文件名为m yfile)。

编译完成后,在对应的D ebug或R elease目录下,可以找到一些编译生成的文件。

VB需要用到的文件有两个。

m yfile.dll(DLL文件)m yfile.bas(在VB中声明DLL的模块文件)。

事实上,m yfile.dll中的函数并不能直接与VB进行数据交换,它只能通过矩阵数据进行操作。

M ah tToo ls提供了一个单独的C++库文件m atlib42.dll(相当VB集成环境与DLL之间的代理,它包含有20多个矩阵句柄操作函数和800多个从M atlab中转换来的矩阵函数)以及相应的模块文件m atlib42.bas。

为了在VB中能调用这类DLL,必须将m yfile. bas和m atlib42.bas加入工程中,并将m yfil.dll和m atlib42. dll拷贝到工程所在的目录下。

编译后,在VB中的函数名为m yfile-in-out,其中,in和out分别为函数的输入输出参数的个数。

注意,在编程时,必须调用m t In it M来初始化库文件,即请求允许使用转换的DLL,并调用m tEx it M来结束这种请求。

另外,还要使用其它的矩阵句柄函数来分配、访问和释放矩阵句柄。

这种方式最简单的例子是直接调用m atlib42.dll中提供的inv-2-1来计算矩阵的逆。

二、采用动态数据交换D EE方法该方法是利用M A TLAB提供的客户 服务器(C lien t Server)功能,VB应用程序作为系统主控,用M atlab作为后台应用程序完成复杂计算任务与绘画功能,M atlab与VB应用程序间通过DD E协议进行数据交换,DD E(D ynam ic D ata Exchange)是一种开放的、与语言无关的、基于消息的协议,它是应用程序通过共享内存进行进程通信的一种形式。

VB应用程序首先通过确定服务器名和主题(top ic)建立与M A TLAB的DD E会话,服务器名和主题唯一地确定作为客户端,M atlab作为服务端,客户端与服务端可以就确定的项目(Ite m)交换数据。

关于VB的DD E功能可以参文献。

VB应用程序中需指明的M A TLAB的服务器为M atlab,, M A TLAB有Syste m和Engine两个主题,在Syste m主题下可以列出M A TLAB所提供的详细的DD E功能,在Engine主题下可以充分实现M A TLAB的服务功能。

利用VB具有的DD E客户端功能,使用M A TLAB的Engine主题支持的三种操作,VB应用程序主河以向M A TLAB传送可执行的命令,从M A TLAB中读取数据以及向M A TLAB中传送数据。

VB为用户提供的支持DD E通信的控件有:窗体(Fo r m)、多文档窗体(M D I Fo r m)、标签(L abel)、文本框(T ex t Box)和图片框(P icture Box)。

相应于DD E协议,这些控件提供了完成一次DD E链接需要的属性和事件,以及设置①②黎洪生 武汉理工大学自动化学院 教授 博士生导师 武汉 430070樊金荣 武汉理工大学自动化学院 硕士 武汉 430070必要的参数和响应DD E 过程事的事件。

服务器应用程序开发涉及到的主要属性如下:1.L i n k M ode :对于一个V isual Basic 程序来说,作为一个服务器程序和作为一个客户程序时,它们的L ink M ode 属性的取值是不同的。

当一个V isual Basic 程序作为服务程序时,L ink M ode 属性只是针对Fo r m 的,它的取值为“1-Source ”。

此时,这个Fo r m 中的P icture Box 控件、T ex tBox 控件和L abel 控件就可以作为客户程序的信息源。

2.L i n k Top i c :如同L ink M ode 属性一样。

对于服务器程序和客户程序来说,属性有不同的意义。

对服务器程序来说,L ink Top ic 属性是针对Fo r m 的,用户可以将服务器程序中的Fo r m 的属性设置为任何一个名字,该名字在客户应用程序中使用。

3.L i n k Ite m :是指通过一个DD E 链接传输的数据容器,它是标签(L abel )、文本框(T ex t Box )和图片框(P icture Box )的名称。

下面以一个具体的例子来说明该方法:在VB 主窗体中设置T ex tl 、T ex t 2两个文本框,当T ex 1的内容有变化,则x 矩阵获得变化后的数据,而后在函数m yfunc 中进行矩阵相乘运算,并把结果返回至T ex t 2控件中。

在实际应用中,m yfunc 函数可以是任意复杂的数据处理函数和控制算法函数。

程序清单:channel =ddein it (′Server ′,′DD E ′);rc =ddeadv (channel ,′T ex tl ′,′m yfunc ′,′x ′,[1,0]);Pause ;rc =ddeunadv (channel ,′T ex tl ′,[1,0]);rc =ddeter m (channel );其中m yfunc 为自定义的m atlab 函数:Functi on y -m yfunc (x 3x );rc =ddepoke (channel ,′′,y ,[10]);注意:利用动态数据交换调用M A TLAB 时,M A TLAB 的命令窗口必须在建立DD E 会话之前已经运行四、采用Acti veX 自动化技术A ctiveX 自动化(OL E 自动化)协议是一种允许一个应用程序(控制端)去控制另一个应用程序(服务器端)的协议。

由于VB 支持A ctiveX 自动化控制端协议,M A TLAB 支持A ctiveX 自动化服务器端协议。

如果已经建立了一个VB 应用程序和M A TLAB 之间的A ctiveX 自动化连接,那么一个VB 应用程序中就可以调用M A TLAB 的命令、向M A TLAB 传送或从M A TLAB 接收矩阵数组。

在VB 应用程序中创建了M A TLAB 的A ctiveX 对象以后就可以使用这个对象所包含的各种方法来实现对M A TLAB 的调用。

M atlab .A pp licati on 对象含有3个方法,可以实现任决定何M A TLAB 功能。

现简单介绍它们的用法。

1.Execute (Co mmand a s Str i n g )方法:执行本方法将调用M A TLAB 执行一条Comm and 字符串决定的M A TLAB 命令,同时返回一个字符串表示命令的执行情况。

任何能在M A TLAB 命令行窗口执行的命令均可以被包括在Comm and字符串中。

2.GetFull M a tr i x 方法:该方法用来将M A TLAB 中的一个矩阵变量传送室VB 程序的一个1维或2维数组中。

3.PutFull M a tr i x 方法:该方法用来将VB 程序的一个1维或2维数组传送到M A TLAB 中的一个矩阵变量中。

4.Vo i d M i n i m i xe Co mmand W i n dow ()方法:该方法用来M A TLAB 使命令行窗口最小化,具体调用如下:Call m atlab M in i m ize Comm and W indow ()。

5.Vo i d M ax i m i ze Co mmandW i n dow ()方法:该方法用来使M A TLAB 命令行窗口最大化,具体调用如下:CallM atlab .M ax i m ize Comm and W indow ()下面我们用具体例子如何使用该方法:例:VB 中建立一个新窗口,上有3个控件。

按钮Comm and 1、编辑框T ex t 1,用来接收M A TLAB 命令、文本控件L abell 用户按下Cmm and 1,该程序运行编辑框中给出的M A TLAB 语句,并将其结果在L abell 控件中显示出来。

(1)建立一个VB 窗口,在其变量声明部分要调用M A TLA T 的A ctiveX 部件,通过如下应用程序在VB 创建A ctiveX 部件,通过如下应用程序在VB 中创建A ctiveX 对象:D i m M atlab as O bject (2)在按钮中给出下面的命令P rivate Sub Comm and 1-C lick ()Set M atlab =C reate O bject (M atlab .A pp licati on )L abell .Cap ti on =M atlab .Execute (T ex tl .T ex t )End Sub如果在T ex t 1中输入一个命令“Surf (peak s )”,按下Comm and 1键后,VB 应用程序通过建立与M A TLAB 的DD E会话,经M A TLAB 执行后生成图形。

相关文档
最新文档