VB与Matlab混合编程

前端之家收集整理的这篇文章主要介绍了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就没问题。

猜你在找的VB相关文章