Since your ActiveX control is IDispatch-based, you are limited to a specific set of data types. Only those data types that are valid VARIANT data types can be passed or returned via a method.
int vc++ ActiveX void GetFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in, out] SAFEARRAY(double)* pr,[in, out] SAFEARRAY(double)* pi); in vb Dim MReal1(5,5) As Double ’声明存放实部的Double型数组 Dim MImag() As Double ’声明存放虚部的Double型数组 Set Matlab=CreateObject(“Matlab.Application”) ’初始化对象 Matlab.Execute(“a=hilb(5)”) ’执行Matlab命令 Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag)
要把VC的结构翻译成VB的结构才可以,把字节对齐设置为1。
然后呢?把这个参数转化成CSafeArray对象?
然后就可以用了?
^_^,大概是这个样子?试试。
void GetFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in, out] SAFEARRAY(double)* pr,[in, out] SAFEARRAY(double)* pi); in vb
Dim MReal1(5,5) As Double
’声明存放实部的Double型数组
Dim MImag() As Double
’声明存放虚部的Double型数组
Set Matlab=CreateObject(“Matlab.Application”) ’初始化对象
Matlab.Execute(“a=hilb(5)”)
’执行Matlab命令
Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag)
好像挺不错,仔细看看!!!
我试了下COleSafeArray好像是可以的。
不知道用SAFEARRAY和用COleSafeArray有什么区别?用COleSafeArray会有什么限制呢?