Когда это инкапсулирует функции 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