传递参量
概述
当封装 MATLAB® 函数时,MATLAB Compiler SDK™ 产品会将 MATLAB 函数参量添加到它创建的类方法的参量列表中。因此,如果 MATLAB 函数使用 varargin 和/或 varargout,编译器会将这些参量添加到类方法的参量列表中。它们被添加在输入和输出参量的参量列表的末尾。
您可以通过创建 varargin 数组将多个参量作为 Variant 数组传递,并将数组的每个元素分配给相应的输入参量。
看生成 COM 类有关输入和输出参量映射的更多信息。
在 Microsoft Visual Basic 程序中创建和使用 varargin 数组
下面的示例创建一个 varargin 数组来调用封装形式为 y=foo(varargin) 的 MATLAB 函数的方法。
MWUtil 实用工具库中包含的 MWComUtil 类提供了 MWPack 辅助函数来创建 varargin 参数。
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 = CreateObject("mycomponent.myclass.1_0")
Call aClass.foo(1,y,v)
foo = y
Exit Function
Handle_Error:
foo = Err.Description
End Function
在 Microsoft Visual Basic 程序中创建和使用 varargout
下一个示例将 varargout 参量作为三个单独的参量进行处理。该函数使用实用工具库中的 MWUnpack 函数。
使用的 MATLAB 函数是 varargout=foo(x1,x2)。
Sub foo(Xout1 As Variant, Xout2 As Variant, Xout3 As Variant, _
Xin1 As Variant, Xin2 As Variant)
Dim aClass As Object
Dim aUtil As Object
Dim v As Variant
On Error Goto Handle_Error
aUtil = CreateObject("MWComUtil.MWUtil")
aClass = CreateObject("mycomponent.myclass.1_0")
Call aClass.foo(3,v,Xin1,Xin2)
Call aUtil.MWUnpack(v,0,True,Xout1,Xout2,Xout3)
Exit Sub
Handle_Error:
MsgBox(Err.Description)
End Sub
从 Microsoft Visual Basic 代码传递空的 varargin
在 MATLAB 中,函数的 varargin 输入是可选的,可以在函数调用中出现或省略。但是,从 Microsoft® Visual Basic® 开始,函数签名更加严格 - 如果 MATLAB 函数输入中存在 varargin,则 VBA 调用必须包含 varargin,即使您希望它为空。要传入一个空的 varargin,请传递 Null 变量,该变量在传递时会转换为空的 MATLAB 元胞数组。
从 VBA 代码传递空的可变参数
下面的示例说明了如何传递 null 变量以传递空的 varargin:
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 = CreateObject("mycomponent.myclass.1_0")
'Call aClass.foo(1,y,v)
Call aClass.foo(1,y,Null)
foo = y
Exit Function
Handle_Error:
foo = Err.Description
End Function