易截截图软件、单文件、免安装、纯绿色、仅160KB

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中创建可以输出函数的DLL

VB中创建的DLL只是COM组件,无法作为输出函数的DLL。今天从朋友哪里搞到一种可以创建输出函数的DLL的方法,欣喜之余,不敢独享,现在把他介绍给大家。
  VB编译文件实际上采取了两次编译的方法,首先是调用c2.exe产生OBJ文件,然后调用Link.exe连接。如果在link的时候添加EXPORT选项,实际上是可以输出函数的。但是,在V ......

VB如何生成WINDOW XP风格界面!

 虽然WindowsXP的界面非常华丽。但是令人遗憾的是,我们用VB写的程序除了菜单和窗口的外观是XP风格外,其他控件还是一如既往的是普通风格。我想,有的程序在XP下有XP的风格,VB也一定有办法实现XP的风格。后来笔者在网上看到一篇介绍XML的文章,又在网上找到了一篇实现XP风格的文章,经过自己的实践,终于找到了VB程序 ......

重拾VB之二,毫秒篇

重拾VB之二,毫秒篇
PMP 关劲松
   
    鬼使神差,09年12月入职的公司仍使用VB开发软件,虽然并非专职开发,但也不得不在事隔4年之后,重新使用VB。
    在vb中如何获得毫秒精度级别的时间?vb的时间函数不支持毫秒,需要利用windows的基本API,编写程序才能获取毫秒级 ......

VB中删除数组重复元素

Option Explicit
Function Delete3(Arr As Variant) As Variant
Dim i As Integer
For i = LBound(Arr) To UBound(Arr)
If i > UBound(Arr) Then Exit For
If Arr(i) = 3 Then
Do
Dim j As Integer
For j = i To UBound(Arr) - 1
......

vb Active 控件 集合类 问题

引言:
         做一个控件, 用于 数据采样如示波器, 可以添加,删除曲线, 设置曲线的相关属性: 线型,颜色,等...
过程:
         先创建 线 类,  在用户控件里实现 线 对象创建,  并声明一个 集合, 用于 存放建立的线对象.
问题 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号