vb调用matlab.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:7 大小:39KB 金币:14 举报 版权申诉
预览加载中,请您耐心等待几秒...

vb调用matlab.doc

vb调用matlab.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

14 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

下面将分别讨论Matlab与VB集成的四种方法:一、借助ActiveX部件Microsoft把所有以COM为基础的技术统称为ActiveX技术。自动化是大多数ActiveX技术的基础,它可使解释性的宏语言(如VB)能够在不了解应用程序实现细节的情况下控制自动化对象。Matlab实现了ActiveX自动化服务支持,在VB下通过ActiveX自动化接口可将Matlab作为VisualBasic语言的一个ActiveX部件调用。MatlabActiveX自动化服务的功能主要包括在Matlab工作空间执行Matlab命令,以及直接从工作空间存取矩阵等,下面列出了Matlab自动化服务支持的几个主要方法,其参数和返回值的类型采用ActiveX自动化协议所定义的与语言无关的类型描述:●BSTRExecute([in]BSTRCommand);BSTR表示宽字符串类型,它与VB存储字符串所采用的数据格式相同。该方法接收字符串命令并在Matlab中执行,将结果以字符串形式返回。●voidGetFullMatrix([in]BSTRName,[in]BSTRWorkspace,[in,out]SAFEARRAY(double)*pr,[in,out]SAFEARRAY(double)*pi);该方法从指定的工作空间检索一个完整的一维或二维的实型或虚mxArray,其实部和虚部被分别存放到两个单独的Double型数组中。●voidPutFullMatrix([in]BSTRName,[in]BSTRWorkspace,[in]SAFEARRAY(double)pr,[in]SAFEARRAY(double)pi);该方法将一个mxArray放入指定的工作空间。各参数的含义及调用方法与GetFullMatrix方法类似。示例代码如下:DimMatlabAsObject’声明对象DimMReal1(5,5)AsDouble’声明存放实部的Double型数组DimMImag()AsDouble’声明存放虚部的Double型数组SetMatlab=CreateObject(“Matlab.Application”)’初始化对象Matlab.Execute(“a=hilb(5)”)’执行Matlab命令CallMatlab.GetFullMatrix(“a”,“base”,MReal1,MImag)’将结果分别存入实部、虚部数组二、借助DDE技术DDE(DynamicDataExchange)允许MicrosoftWindows应用程序通过交换数据实现彼此间的通信。应用程序间彼此通信要先建立一个DDE会话,对会话进行初始化的应用程序称为客户端(Client),对Client端作出响应的应用程序称为服务器(Server)。图1描述了Matlab作为服务器时与其他应用程序的通信机制。图1借助DDE时应用程序通信机制图1借助DDE时应用程序通信机制其中,DDE功能函数既可以由应用程序提供,也可以由Matlab引擎库提供。初始化会话时,客户端应用程序必须指定两个参数servicename(服务器应用程序的名称)和topic(会话主题)。下面的示例说明了VB与Matlab建立并完成DDE会话的全过程:说明:TextInput是输入文本框,TextOutput是输出文本框。在TextInput中输入Matlab命令回车后,由Matlab在后台执行并将结果返回给TextOutput显示。SubTextInput_KeyPress(KeyAsciiAsInteger)IfKeyAscii=vbKeyReturnthen’初始化TextInput与Matlab间的DDE会话TextInput.LinkMode=vbLinkNoneTextInput.LinkTopic=“MATLAB|Engine”TextInput.LinkItem=“EngEvalString”TextInput.LinkMode=vbLinkManualszCommand=TextInput.Text’执行Matlab命令TextInput.LinkExecuteszCommandTextInput.LinkMode=vbLinkNone’初始化TextOutput与Matlab间的DDE会话TextOutput.LinkMode=vbLinkNoneTextOutput.LinkTopic=“MATLAB|Engine”TextOutput.LinkItem=“EngStringResult”TextOutput.LinkMode=vbLinkManual’返回执行结果并显示TextOutput.LinkRequestTextOutput.LinkMode=vbLinkNoneEndIf