VB与Matlab混合编程

VB与Matlab混合编程有多种方式,这里讨论Matlab将M文件编译成com组件共VB调用的方式。

Matlab版本:Matlab 7.7. 0.471 R2008b

VB版本:VB 6.0 & VB 2008

首先写好完成某个功能的m文件,比如在m文件中写入如下函数

function [returns,stderr]=GetReturns(prices)
returns=price2ret(prices) %求价格序列的对数收益率
stderr=std(returns) %求收益率的标准差
end

函数接受一个价格序列,返回该价格序列的收益率和收益率的标准差。将该函数存储为GetReturns.m。

然后在matlab中运行deploytool打开发布工具,执行菜单File/New Deployment Project菜单打开新建项目对话框,在左侧列表选择MATLAB Builder NE,在右侧列表选择Generic COM Component,然后在下方Name输入框输入项目名称,点OK按钮确定建立项目。

执行Project/Add File菜单,选择刚写好的GetReturns.m文件。如果想让COM组件包含多个函数,可添加多个m文件

接下来就是编译和打包了。执行Tools/Build菜单,将在工程目录的distrib文件夹下编译生成dll,注册该dll(使用regsvr32命令)即可在VB中加载并使用了。其实编译完成后matlab就自动注册了工程目录的src文件夹下的dll,直接在VB中加载使用即可。

如果要在没有安装matlab的机器上使用该dll,就要进行打包。执行Tools/Packge菜单,matlab会将该dll依赖的component打包成一个projectName_pkg.exe,将该exe拷贝到目标机器执行,会解压出MCRInstaller.exe,MCRRegCOMComponent.exe和_install.bat三个文件,执行批处理文件_install.bat即会安装Matlab Compiler Runtime(MCR),并且注册我们编译的dll。

VB2008和VB6中使用dll的注意事项:

注册dll后就可在VB中像使用其他引用组件一样使用了,只是要注意VB2008和VB6中使用的不同之处。VB2008中调用函数时,输出参数如果为矩阵(一维或者二维),可以定义一个二维数组传入函数。但在VB6中不能这么调用,如果定义数组传给matlab编译的dll是得不到输出数据的,必须定义为variant变量,注意是变量,不是数组,才能获取matlab要输出的矩阵数据。当然,在VB2008中也可将参数定义为Object类型,同样可以正常获取输出数据。

还有一点,输入参数尽量定义成double型再传入,否则dll运行可能会报错。测试中遇到输入参数直接写10运行报错,而写成10.0就没问题。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 --------------------------...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, t...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integ...