2022年在VB开发环境中调用由MATLAB函数转化的DLL宣贯 .pdf
第25卷总第53期 西 北 民 族 大 学 学 报(自然科学版)Vol.25,No.22 0 0 4年6月 Journalof Northw est UniversityforNationalities(Natural Science)June,2004在VB开发环境中调用由MA TLAB函数转化的DLL冯 旭(西北民族大学现代教育技术学院,甘肃 兰州 730030)摘 要 VB是一个高效快速的软件开发平台,但在进行数值计算需要编写大量的代码,还需要反复调试以保证其可靠性和稳定性1 通过编写DLL,只须少量代码,并且MA TLAB的算法是经过商业化的考验,比较可靠,省去了许多软件维护费用1 特别是要编写一些复杂的算法,例如,大型稀疏矩阵、大型线形方程组的解法、微分方程及偏微分方程的解法等等,并在此基础上开发更复杂的算法,该方法的优越性将更加明显1关键词 MA TLAB;MIDEVA;Matcom4;VB;DLL中图分类号 TP311文献标识码A文章编号 1009-2102(2004)02-0065-03Matlab 是 MathWorks 公司于 1982 年推出的一套高性能的数值计算和可视化软件,适合于科学和工程技术人员使用的计算语言,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便、界面友好的用户环境1 它还包括了ToolBox(工具箱)的各类问题的求解工具,可用来求解特定学科的问题,其基本元素是一个为数不限的复矩阵,并完成了对矩阵运算效率的优化1MA TLAB 采用 M-语言进行编程,在程序执行过程中对M-文件进行解释,程序结构完整,但不能脱离其环境运行,因此它不能被用于开发商用软件1Visual Basic开发平台提供了开发Windows 应用程序最迅速、最简洁的方法,特别在我国VB 拥有非常广泛的用户群体1 但 VB 的数值计算功能并不十分强大,往往一个简单的算法就需要很多代码完成,更何况复杂的矩阵运算,因此很多人由于这方面原因而放弃使用VB,造成不必要的资源浪费1 为了使 VB,最大限度地发挥MA TLAB 功能,同时脱离MA TLAB 这一庞大的运行环境,本文将介绍MA TLAB 函数即 M-文件如何转换到DLL 以及如何在VB 中调用这一类动态库1本文开发环境为MA TLAB 6.0、M IDEVA4.5、Matcom4.2、VB6.011 VB 与 MA TLAB 混合编程方式VB 与 MA TLAB 结合在一起编程的方式主要有以下几种:(1)利用组件对象模型即COM 规范,自动化 Automation 协议,通过引擎(Engine),采用客户机/服务器(Client/Server)模式进行通信1 实际应用中,VB 作为前端客户机通过引擎调用作为Automation 服务器端的MA TLAB 1 但这种方式需要MA TLAB 在后台实时运行,不能生成独立运行的应用软件包,因此,在软件开发中很少使用1(2)利用Matlabvbtrix 1Matlabvbtrix是 Math Tools 公司(已被 MathWorks 收购)专门为VB 开发环境提供的一个COM 接口,主要包含 MA TLAB 中常用的 500 多个函数,但用户也仅限于使用这些函数,不能随意编写收稿日期 2004-04-15作者简介冯旭(1970),男,工程师,主要研究方向:计算机网络与工程156?1994-2006 China Academic Journal Electronic Publishing House.All rights reserved.http:/名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 3 页 -自己的 M 文件 1 而 Matlab 最重要的特点是易于扩展,因此应用范围也受到限制1(3)通过 DLL 实现二者的结合 1 用户不仅可以使用Matlabvbtrix所提供的MA TLAB 基本函数,还可以在MA TLAB 中随意编写自己的M-文件,对于一个从事特定领域的工程师来说,还可方便地构造出专用的函数,从而大大扩展了 Matlab 的应用范围1 然后通过 M IDEVA 转化为 VB 可调用的DLL,就可以开发出独立的应用程序 12 M-文件转化为DLL本文将一个M-文件转换成一个VB 可调用的 DLL,如果利用MA TLAB 编译器,操作的过程很繁琐,需要很多设置1 利用 Math Tools公司产品 Mideva 可以大大简化这一过程1 以前也有文章介绍这方面操作,由于当时 Mideva 版本较低,生成 DLL 仍需要大量的设置,Mideva4.5 大大简化了这些过程1 操作步骤如下:启动运行Mideva,点击菜单File/Compile to dll,选择要转化的M-文件 1 这里要转化的M-文件必须是能够作为函数被其他开发环境调用的M-文件,假设文件名为mymfile.m 如果要编译M-文件是没有输入也没有输出的脚本文件,可以现将其编辑成无输入无输出的函数1 事先可以在Mideva 的环境下进行设置,即在菜单Configuration 中配置编译的参数为Debug 模式或Release模式 1转换完成后,可以看到在对应的Debug或 Release目录下,有许多编译生成的文件1 在 VB 开发环境中需要用的文件有3 个:mymfile.dll(DLL 文件)、mymfile.bas(在 VB 中声明 DLL 的模块文件)、mymfile.cls(类模块文件,调用DLL的接口)1 为了在VB中能够调用生成的DLL,需要将mymfile.dll拷贝到System或者 System32 目录下;将 mymfile.bas、mymfile.cls 拷贝到 VB 当前工程目录下13 VB 中调用 DLLVB 中调用 DLL 实际是调用mymfile.cls接口,然后通过该接口实现调用System目录下的 DLL,这是 Mideva4.5 新增加的功能,以前在要调用DLL,必须通过矩阵句柄进行,很不方便 1 准备工作很简单,只需将 mymfile.bas和 mymfile.cls 文件加入到VB 当前工程,为了能应用强大的矩阵运算功能,客户端还需安装 Matlabvbtrix 14 实例分析该例子旨在说明如何在Mideva 中生成动态链接库,以及如何在VB 中调用生成的DLL 1问题:求两个矩阵的和与差1)先在 MA TLAB 编写程序mymfile.m%mymfile.m 实现矩阵的和与差function ADD,ODD=mymfile(A,B);ADD=A+B;ODD=A-B;2)用 Mideva 将 mymfile.m 转化成 mymfile.dll,同时生成 VB 需要的文件mymfile.bas和 mymfile.cls3)将 mymfile.bas和 mymfile.cls 加入到 VB 工程中;并且在VB 工程中引入Matlabvbtrix,过程为点击菜单Project,选择 Reference,在 Reference对话框中复选Mmatrix,OK14)选择一个窗体,加入一个按钮1 为按钮编写单击事件函数为:Private Sub Command1-Click()Dim inputnatrix(0 To 1),Einputnatrix(0)=ones(2,2)inputnatrix(1)=zeros(2,2)E=mymfile(myinput)66?1994-2006 China Academic Journal Electronic Publishing House.All rights reserved.http:/名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 3 页 -E(1).ShowE(2).ShowEnd Sub注意:所调用函数自变量数组下标界从0 开始,而返回矩阵数组下标从1 开始 15)调试通过,打包整理,完成一个独立运行的应用软件包15 关于工具箱函数为了在 VB 中充分利用MA TLAB 工具箱诸如自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等的强大功能,在编写含有这些工具箱函数的M-文件时,必须将这些函数完全展开,即将实现这些函数的M-文件拷贝到自己要编写的M-文件中,这样在应用时不至于遇到编译错误 1 作者成功在VB 中调用神经网络工具箱函数,由于篇幅所限,不在此详细说明,大家可以根据自己实际需要参照进行16 小结VB 是一个高效快速软件开发平台,但在进行数值计算需要编写大量的代码,还需要反复调试以保证其可靠性和稳定性1 通过编写 DLL,只须少量代码,并且 MA TLAB 的算法是经过商业化的考验,比较可靠,省去了许多软件维护费用1 特别是要编写一些复杂的算法,例如,大型稀疏矩阵、大型线形方程组的解法、微分方程及偏微分方程的解法等等,以及在此基础上开发更复杂的算法,该方法的优越性将更加明显 1 但以前提供的类似方法都需要很多设置和烦琐的规定,不易上手,本文介绍的方法是目前VB 调用 M-文件转化来的DLL 最简便的1 可以看出这是一种时间、效率上的极好的折衷,它使得你可以将更多的时间放在项目关键问题的思考上,对于广大工程技术人员的开发工作是十分有益的1参考文献:1李仁厚,张平.精通MA TLAB-综合辅导与指南 M.西安:西安交通大学出版社,1999.2王颖,胡宗军.ActiveX:从Visual Basic 6.0调用MA TLAB的实现方法 M.机电工程,19991172-174.3 How do I call a Compiler generated stand-alone DLLfrommy Visual Basic application in MA TLAB6.0(R12) 4 Steven Holzner.Visual Basic 6技术内幕 M.北京:机械工业出版社,1999.Calling a MAT LAB-Generated Dynamic LinkLibraryin Visual Basic ProgrammingFENGXu(ModernEducationTechnology College NorthwestMinoritiesUniversity,LanzhouGansu 730030,China)AbstractThis paper comparesthe meansby which Visual Basic programs call MA TLAB function firstly,then accountsfor how to compile a MA TLAB function into a stand-alone DLL and how to call the DLL inVB Programming.The method makesuseof the advantagesof VB and MA TLAB fully,supplys a power2ful technical support for the exploitation of application software fasty and effectively.Key words MA TLAB;M IDEVA;Matcom;VB;DLL76?1994-2006 China Academic Journal Electronic Publishing House.All rights reserved.http:/名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 3 页 -