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就没问题。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值