Когда это инкапсулирует MATLAB® функции, продукт MATLAB Compiler SDK™ добавляет аргументы функции MATLAB в список аргументов методов класса, которые это создает. Таким образом, если функция MATLAB использует varargin и/или varargout, компилятор добавляет эти аргументы в список аргументов метода класса. Они добавляются в конце списка аргументов для аргументов ввода и вывода.
Можно передать несколько аргументов как varargin массив путем создания Variant массив, присваивая каждый элемент массива к соответствующему входному параметру.
Смотрите Создание COM-класса для получения дополнительной информации об отображении аргументов ввода и вывода.
Следующий пример создает varargin массив, чтобы вызвать метод, инкапсулирующий функцию MATLAB формы y=foo(varargin).
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
Следующий пример обрабатывает 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
В MATLAB, varargin входные параметры функций являются дополнительными, и могут присутствовать или не использованы от вызова функции. Однако от Microsoft® Visual Basic®, функциональные подписи более строги — если varargin присутствует среди входных параметров функции MATLAB, вызов VBA должен включать varargin, даже если вы хотите, чтобы он был пуст. Передать в пустом varargin, передайте Null вариант, который преобразован в пустой массив ячеек MATLAB, когда передано.
Следующий пример иллюстрирует, как передать пустой вариант для того, чтобы передать пустой 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