这里放两个在实际工作中遇到的问题,还没找到解决的方法,向广大网友求助。
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.