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