使用工具库:处理varargin和varargout参数

当原始MATLAB函数中存在varargin和/或varargout时,这些参数将作为列表中最后的输入/输出参数被添加到类方法的参数列表中,可以创建一个Variant型数组。指定数组的元素为各个输入参数,并用该数组进行传递。

下面的例子创建一个varargin数组,以便调用一个由形如y=foo(varargin)的MATLAB函数生成的方法。

code.excel vba
Function foo(x1 As Variant, x2 As Variant, x3 As Variant, _
                 x4 As Variant, x5 As Variant) As Variant
     Dim aClass As Object
     Dim v(1 To 5) As Variant
     Dim y As Variant

     On Error Goto Handle_Error
     v(1)=x1
     v(2)=x2
     v(3)=x3
     v(4)=x4
     v(5)=x5
     aClass=text-blue-400">CreateObject("mycomponent.myclass.1_0")
     '调用aClass的一些方法
     Call aClass.foo(1,y,v)
     foo=y
     Exit Function
Handle_Error:
     foo=Err.Description
End Function

下面将一个varargout参数分成3个Excel Range参数,foo过程用到了MWComUtil工具库中的MWUnpack函数,用到的MATLAB函数为varargout=foo(x1,x2)。

code.excel vba
Function foo(Rout1 As text-blue-400">Range, Rout2 As text-blue-400">Range, Rout3 As text-blue-400">Range, _
                 Rin1 As text-blue-400">Range, Rin2 As text-blue-400">Range)
     Dim aClass As Object
     Dim aUtil As Object
     Dim v As Variant

     On Error Goto Handle_Error
     aUtil=text-blue-400">CreateObject("MWComUtil.MWUtil")
     aClass=text-blue-400">CreateObject("mycomponent.myclass.1_0")
     Call aClass.foo(3,v, Rin1,Rin2)
     Call aUtil.MWUnpack(v,0,True,Rout1,Rout2,Rout3)
     Exit Sub
Handle_Error:
     foo=Err.Description
End Function