编辑:
2014-10-10
下面借助实例说明在 VB 中调用 M 文件编写的函数的具体过程:
(1)利用 Matlab 编写函数,并保存为 M文件。前面例子程序中调用的函数 SigGenerate 的 M 文件如下:
functionrmmSig=SigGenerate(m,k,cb,N,d,aw) %这里省略具体代码。
编辑好函数以后, 存为 SigGenerate.m 文件, 利用MIDEVA(安装 Matcom45 后的可执行程序)将其编译为SigGenerate.dll,同时还会自动生成在 VB 中声明 dll 的模块文件 SigGenerate.bas 和函数文件 SigGenerate.cls。
(2) 把 SigGenerate.dll 文件拷贝到 VB 工程目录或者是系统目录 system32 下, 并把 SigGenerate.dll 按照SigGenerate.bas 文件中的样式在 VB 工程的公用模块中声明如下:
Public Declare Function Siggenerate_vLib" Siggen-erate.dll"Alias" As String,ByValnlhsAsLong,By Refplhs As Long,By Valnrhs AsLong,By Refprhs As Long)As Long(3)把 SigGenerate.cls 中的 SigGenerate 函数添加到VB 的公共模块,其中的程序不需要作任何更改,其输入输出和在 M文件中定义的完全相同,SigGenerate 函数返回值是一个矩阵。
(4)要与 Matrix 函数动态链接库接口,还必须有一个COM动态链接库作为运行环境和 Matrix 函数动态链接库之间的代理, 因此在 VB 工程中也必须引用 MMa-trix(安装 Matcom后会自动注册)作为代理。这样 Matlab编写的函数 SigGenerate 就可以直接在 VB 中应用,就如前面的例子所 示:vntRmm=SigGenerate(intm,intk,intN,vntAw)’
其中的输入参数有矩阵变量也有普通常数。
2.3 应用 Active 自动化技术ActiveX 自动化(OLE 自动化)协议是一种允许一个应用程序(控制端)去控制另一个应用程序(服务器端)的协议。由于 VB 支持 ActiveX 自动化控制端协议,MATLAB 支持 ActiveX 自动化服务器端协议, 因此如果已经建立了一个 VB 应用程序和 MATLAB 之间的ActiveX 自动化连接,那么在一个 VB 应用程序中就可以 调 用 MATLAB 的 命 令 、 向 MATLAB 传 送 或 从MATLAB 接 收 矩 阵 数 组 。 在 Windows 注 册 表 中 ,MATLAB 的 ActiveX 对象名为“Matlab.Application”。在VB 应用程序中创建 ActiveX 对象的具体步骤如下:
DimMatlabasObjectDimResultasStringSetMatlab=CreateObject(″Matlab.Application″)在 VB 应用程序中创建了 MATLAB 的 ActiveX 对象以后就可以使用这个对象所包含的各种方法来实现对 MATLAB 的调用。Matlab.Application 对象含有 3个方法, 它们是 Execute,GetFullMatrix,PutFullMatrix,利用这些方法在 VB 应用程序内可实现任何 MATLAB功能。现简单介绍它们的用法:
BSTRExecute([in]BSTRCommand); 执 行 Execute方法将调用 MATLAB 执行一条由 Command 字符串决定的 MATLAB 命令,同时返回一个输出字符串表示命令的执行情况, 绘图命令生成的图形窗口将显示在屏幕上,为了在 VB 中获得 MATLAB 中产生的图像,可以使 用 以 下 两 条 命 令 先 将 MATLAB 生 成 的 图 像 以bitmap 文件格式存入剪贴板中, 然后再将图像从剪贴板中读出。
Result=MatLab.Execute(″print- dbitmap″)Image1.Picture=Clipboard.GetData()voidGetFullMatrix([in]BSTRName,[in]BSTRWorkspace,[in, out]SAFEARRAY(double)*pr,[in, out]SAFEARRAY(double)*pi) ;GetFullMatrix 方法用来将 MATLAB 中的一个矩阵变量传送到 VB 程序中一个 1 维或 2 维数组中。其中 Name 指定了 MATLAB 中的矩阵变量名,Workspace指定了该矩阵所在的 MATLAB 工作区,pr 是指 VB 程序中的实部数组,pi 是指 VB 程序中的虚部数组。
voidPutFullMatrix([in]BSTRName,[in]BSTRWorkspace,[in]SAFEARRAY(double)pr,[in]SAFEARRAY(double)pi) ;PutFullMatrix 方法用来将 VB 程序中一个 1 维或2 维数组传 送到 MATLAB 中的一 个 矩 阵 变 量 中 。
MATLAB5.3 以前的版本中,MATLAB 是作为一个多用户的 ActiveX 自动化服务器,这就意味着几个控制端客户将连接到同一个 MATLABActiveX 自动化服务程序上。如果有两个使用 MATLAB 作为自动化服务器的VB 程序,那么当一个程序启动并试图建立与 MATLAB的连接时,Windows 将查找是否已经有一个 MATLAB自动化服务程序在运行, 如果有它将连接已经运行的MATLAB 自动化服务器, 如果没有它将自动用带/Au-tomation 的命令行参数来启动 MATLAB,因此两个应用程序共享 MATLAB 的所有资源,包括工作空间中的各个变量。而在 MATLAB5.3 版本中有两种方式来启动MATLAB 自动化服务器, 这两种方式分别由使用不同的 MATLABActiveX 对象名区分,当使用默认的对象名“Matlab.Application”时,所有要求 MATLAB 的客户端,都将连接到同一个 MATLABActiveX 自动化服务程序上,当使用对象名“Matlab.Application.Single”时,每一个客户端都与独立的 MATLABActiveX 自动化服务程序相连接。因此,同时运行的每个 MATLAB 自动化服务程序都有各自独立的工作空间和变量。因此当有多个VB 应用程序都使用 MATLAB 作为 ActiveX 自动化服务器时,需特别注意它们是否共享工作空间和变量。
2.4 动态数据交换(DDE)技术动态数据交换 (Dynamic Data Exchange, 简称DDE) 是随着 Windows 的应用而发展起来的一门新技术, 是在 Windows 环境下支持客户/服务器(Client/-2 48-邮局订阅号: 82-946 360 元 / 年技术创新软 件 时 空《 PLC 技术应用 200 例》
您的论文得到两院院士关注Server)计算模式的重要技术之一。因为 Windows 允许用户进行多窗口、多任务工作, 所以 DDE 技术允许Microsoft Window。应用程序通过交换数据实现彼此间的通信。MATLAB 支持两种链接方式: 热链和温链。所谓热链, 即指当链接的 DDE 服务者在其本身状态发生变化时立即将结果反映给客户的链接方式; 而温链是指客户提出情求时才能反映出变化的链接方式。
标签:VB论文
精品学习网(51edu.com)在建设过程中引用了互联网上的一些信息资源并对有明确来源的信息注明了出处,版权归原作者及原网站所有,如果您对本站信息资源版权的归属问题存有异议,请您致信qinquan#51edu.com(将#换成@),我们会立即做出答复并及时解决。如果您认为本站有侵犯您权益的行为,请通知我们,我们一定根据实际情况及时处理。