Для создания COM-класса требуется генерация
Файл определения класса на языке описания интерфейса (IDL)
Один или несколько связанных файлов определения/реализации класса C++
Продукт MATLAB ® Compiler SDK™ автоматически создает код IDL и C/C + +, необходимый для построения каждого COM-класса в компоненте. Этот процесс обычно прозрачен для пользователя при использовании компилятора для создания COM-компонента, а также для пользователей COM-компонента при программировании с его помощью.
Сведения о правилах кодирования IDL и C++ для построения COM-объектов и сопоставлениях с другими языками см. в статьях библиотеки MSDN.
В следующей таблице показано сопоставление общей функции MATLAB с кодом IDL и Microsoft ® Visual Basic ®.
| Кодекс | Образец |
|---|---|
| Общий код MATLAB | function [Y1, Y2, ..., varargout] = foo(X1, X2, ..., varargin) |
| Код IDL | HRESULT foo([in] long nargout,
[in,out] VARIANT* Y1,
[in,out] VARIANT* Y2,
.
.
[in,out] VARIANT* varargout,
[in] VARIANT X1,
[in] VARIANT X2,
.
.
[in] VARIANT varargin); |
| Визуальный базовый код | Sub foo(nargout As Long, _
Y1 As Variant, _
Y2 As Variant, _
.
.
varargout As Variant, _
X1 As Variant, _
X2 As Variant, _
.
.
varargin As Variant) |
Определение IDL-функции генерируется путем создания функции с тем же именем, что и исходная функция MATLAB, и списка аргументов, содержащего все входы и выходы исходного плюс один дополнительный параметр. nargout.
При наличии nargout параметр является [in] параметр типа long. Это всегда первый аргумент в списке. Этот параметр обеспечивает правильное прохождение MATLAB nargout для скомпилированного кода MATLAB. nargout параметр не создается, если инкапсуляция функции MATLAB не содержит выходных данных.
После nargout , выходы перечислены в порядке их появления в левой части функции MATLAB и помечены как [in,out], что означает, что они проходят в обоих направлениях.
Ниже перечислены входные данные функций, которые отображаются в том же порядке, что и в правой части исходной функции. Все входы помечены как [in] параметры.
При наличии необязательный параметр varargin/varargout параметры всегда перечисляются как последние входные параметры и последние выходные параметры. Все параметры, отличные от nargout передаются как COM VARIANT типы. В окне «Преобразование данных» перечислены правила преобразования между массивами MATLAB и COM. VARIANTs.
Microsoft Visual Basic обеспечивает встроенную поддержку COM Variants с Variant тип, а также неявные преобразования для всех типов примитивов Visual Basic в и из VariantС. В целом в качестве аргументов могут передаваться массивы/скаляры любого типа-примитива Visual Basic, а также массивы/скаляры типов Variant.
Компоненты COM компилятора MATLAB SDK также обеспечивают прямую поддержку Excel ®Range объект, используемый Visual Basic для приложений для представления диапазона ячеек на листе Excel.
Дополнительные сведения о типах данных Visual Basic см. в документации по Visual Basic для приложений, входящей в состав Microsoft Excel.
Дополнительные сведения о Visual Basic и Excel см. в библиотеке MSDN Range манипуляции.