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