2024年3月26日发(作者:)

Matlab函数转换为VB可用的DLL

Matlab函数转换为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中将它编辑成无输入无输出的函数,再按照上述操作进行转换。

编译之前,还可以在Mideva集成环境的菜单Configuration中配置编译的参数为

Debug模式或Release模式。编译完成之后,在对应的Debug或Release目录下,可以

看到一些编译生成的文件。在VB集成环境中需要用到的文件有2个:yourfile.dll(DLL

文件)和yourfile.bas(在VB中声明DLL的模块文件)。为了在VB中能够调用这类DLL,

要求将yourfile.bas和matlib42.bas加入到你的工程中,并将yourfile.dll以及

matlib42.dll拷贝到工程所在的目录下。编译后,在VB中的函数名为yourfile_in_out,

其中,in和out分别为函数的输入参数和输出参数的个数,例如c=conv(a,b),编译转

换后的函数名为conv_2_1。

3 数据接口

VB中要使用DLL,必须在你的工程中包含DLL的声明文件(即模块文件),同时还要

将DLL拷贝到工程文件所在的目录中。事实上,yourfile.dll中的函数并不能直接与集成

环境进行数据交换,它只能通过矩阵句柄进行接口。这些句柄与文件句柄类似,它是用一个

32位的矩阵整数来表示的,它们可以被创建,也可以被删除,通过它可以对矩阵数据进行

操作。这样,集成环境与DLL之间需要1个中间层,MathTools提供了一个单独的C++库

文件Matlib42.dll以及相应的模块文件Matlib42.bas。Matlib42.dll相当于VB集成

环境与DLL之间的代理,在这一DLL中包含有20多个矩阵句柄操作函数和800多个从

Matlab转换而来的矩阵函数。表1列出了Matlib42.dll提供的比较常用的14个矩阵句柄

函数。