求助:Matlab 如何支持 VB 制作的 COM DLL

作者: , 共 910 字

这里放两个在实际工作中遇到的问题,还没找到解决的方法,向广大网友求助。

Matlab 如何调用自定义的 COM DLL 的类?

我之前用 visual basic 6.0 制作了一个 COM DLL ,里面有几个类,还有几个模块函数。这个 DLL 被 Excel 调用没有任何问题。但我希望能在 Matlab 里面也直接调用它,没有成功。

按照帮助文件,此时需要用 actxserver 建立类实例(当然在使用前已经用 regsvr32 注册了 dll 文件,即在 Matlab 中运行'!regsvr32 testdll.dll'),假设 dll 的工程名为 testdll ,里面含有类 testclass ,我已经用下面代码生成一个 testfun 实例:

testclass= actxserver('testdll.testclass')

那么是否可以正常使用 testclass 呢? It depends ,有些函数成员可以用,有些则不行,或者说我还没搞清楚如何用。

比如 Matlab 无法识别 VB 的可选参数。比如 testclass 定义了一个成员函数 testfun(a, optional b),那么在 Matlab 里面调用 testclass.testfun(1)是可行的(但计算结果可能不如预期,因为 b 被默认初始化为 0 ,即使你在函数的定义中重新定义了 b ),而 testclass.testfun(1, 2)则会报错。

Matlab 如何调用 COM DLL 中的函数?

这个 DLL 是别的程序自带的(比如 WIND 自带的 WDF.dll ), Excel 下可正常使用,也知道它的内置函数的 VB 原型。但没办法用 loadlibrary 调用它内置的函数。

在网上搜到只言片语,说只需要为 DLL 建立一个相应的 C 语言的 h 文件即可。但 VB 的数据类型和 C 完全不一样,比如 VB 中原型为 function testfun(p1 as Date, p2 As String, optional p3) as Long 的函数,其对应的 h 文件头该怎么写呢?

Q. E. D.

类似文章:
编程 » Excel, VBA
某些时候需要打开 Excel 文件来获取或者写入数据,但又不希望跳出打开的 Excel 文件窗口,可以用下面的代码:
编程 » Excel, VBA
效果图:
编程 » Excel
在编辑 Excel 文件时经常遇到的一个问题是,我这边用得好好地,换台机器就变了个样,或者根本用不了。下面是我在日常工作中总结的一些避免这些情况的小技巧。
相似度: 0.081
最近写了一些 Matlab 程序,想起以前想过的一个东西,记录一下。
2014-03-25 更新:我已经将该类修改成函数形式,并增加新功能,参见更新 Excel 的数据库查询函数库
基于将工作文件在家里电脑和公司电脑上的转移、Kindle 上电子书的管理的需求,我用 Matlab 写了几个函数,用来实现这些需求。
编程 » Matlab
Matlab 在启动时会自动运行脚本startup.m。在这个脚本里可以自动修改当前目录,修改显示方式等等。比如
编程 » Matlab, 编译器
现在比较新的电脑基本上都是 64 位的 CPU , Matlab 也是 64 位的版本,但 64 位的 Matlab 没有自带编译器,需另行安装编译器。下面是方法之一:
上次大规模使用 Matlab 还是本科的时候,当时还是 5.3 版,现在重新尝试它,已经是 7.8 ( R2009a ),而且 R2010b 版都已经发售。而这些版本引入的一个新玩意儿便是面向对象化编程( object-oriented programming , OOP )。
最近用 Matlab 写了个东西,运行效率不如我意。用 Profiler 跟踪了一下,结果让我大吃一惊。其中三分之一的时间花费在 datestr 这个函数上,六分之一的时间花费在 save 和 load 数据上。这里先谈前一个问题,关于 save 和 load 的效率以后再谈。
Matlab 的 database 工具箱只支持 ODBC 数据库连接,在使用之前需要先设置 ODBC 数据源。之前在 Excel 里用的是 ADODB ,使用 ADODB 的好处是无需设置 ODBC 源,似乎效率也要高一些(但我一直没弄懂 ADODB 是什么东西,所以效率这东西我也说不清)。
投资 » 凯利判据
凯利判据(英文 wikipedia)是一种人们在面对不确定事物时的选择标准,更准确地说,凯利判据是效应函数为「log 函数」的投资者(或赌徒)的决策方式。下面直接用一个例子来说明: