В этом разделе описываются правила преобразования данных для компонентов Compiler™ MATLAB ®. Эти компоненты представляют собой объекты Microsoft ® COM с двумя интерфейсами, поддерживающие типы данных, совместимые с Automation.
Примечание
Автоматизация (ранее называвшаяся OLE Automation) - технология, позволяющая пакетам программного обеспечения предоставлять свои уникальные функции инструментам создания сценариев и другим приложениям. Автоматизация использует объектную модель компонента (COM), но может быть реализована независимо от других функций OLE, таких как активация на месте.
При вызове метода в компоненте MATLAB Compiler входные параметры преобразуются в формат внутреннего массива MATLAB и передаются в скомпилированную функцию MATLAB. При выходе из функции выходные параметры преобразуются из формата внутреннего массива MATLAB в типы COM Automation.
COM-клиент передает все входные и выходные аргументы в скомпилированных функциях MATLAB как тип VARIANT. COM VARIANT type - это объединение нескольких простых типов данных. Тип VARIANT переменная может хранить переменную любого из простых типов, а также массивы любого из этих значений.
Интерфейс прикладных программ Win32 (API) предоставляет множество функций для создания и управления VARIANTs в C/C + +, и Visual Basic ® обеспечивает поддержку этого типа на родном языке.
Примечание
Это обсуждение данных относится к обоим VARIANT и Variant типы данных. VARIANT - имя C++ и Variant - соответствующий тип данных в Visual Basic.
Определения и поддержку API для COM см. в документации Visual Studio ®VARIANTs. VARIANT переменные являются самоописанием и сохраняют код типа в качестве внутреннего поля структуры.
В следующей таблице перечислены VARIANT коды типов, поддерживаемые компонентами компилятора MATLAB.
Поддерживаемые коды типа VARIANT
VARIANT Код типа(C/C + +) | Тип C/C + + | Variant Код типа(Visual Basic) | Визуальный базовый тип | Определение |
|---|---|---|---|---|
VT_EMPTY | — | vbEmpty | — | Неинициализированный |
VT_I1 | char | — | — | Подписанный однобайтовый символ |
VT_UI1 | неподписанный | vbByte | Byte | Беззнаковый однобайтовый символ |
VT_I2 | short | vbInteger | Integer | Подписанное двухбайтовое целое число |
VT_UI2 | unsigned short | — | — | Беззнаковое двухбайтовое целое число |
VT_I4 | long | vbLong | Long | Подписанное четырехбайтовое целое число |
VT_UI4 | unsigned long | — | — | Беззнаковое четырехбайтовое целое число |
VT_R4 | float | vbSingle | Single | Четырехбайтовое значение с плавающей запятой IEEE ® |
VT_R8 | double | vbDouble | Double | Восьмибайтовое значение с плавающей запятой IEEE |
VT_CY | CY+ | vbCurrency | Currency | Значение валюты (64-разрядное целое число, масштабировано на 10 000) |
VT_BSTR | BSTR+ | vbString | String | Строковое значение |
VT_ERROR | SCODE+ | vbError | — | Один |
VT_DATE | DATE+ | vbDate | Date | Восьмибайтовое значение с плавающей запятой, представляющее дату и время |
VT_INT | int | — | — | Целое число со знаком; эквивалентно типу |
VT_UINT | unsigned int | — | — | Целое число без знака; эквивалентно типу |
VT_DECIMAL | DECIMAL+ | vbDecimal | — | 96-битное (12-байтовое) целое число без знака, масштабированное переменной степенью 10 |
VT_BOOL | VARIANT_BOOL+ | vbBoolean | Boolean | Двухбайтовое логическое значение (0xFFFF = True; 0x0000 = ложь) |
VT_DISPATCH | IDispatch* | vbObject | Object |
|
VT_VARIANT | VARIANT+ | vbVariant | Variant |
|
< все что угодно>|VT_ARRAY | — | — | — | Побитовый комбайн |
< все что угодно>|VT_BYREF | — | — | — | Побитовый комбайн |
+ Обозначает тип, специфичный для Windows. Не входит в стандартный C/C + +. | ||||
В следующей таблице перечислены правила преобразования из MATLAB в COM.
Правила преобразования MATLAB в COM VARIANT
| Тип данных MATLAB | VARIANT Тип скалярных данных | VARIANT Тип для данных массива | Комментарии |
|---|---|---|---|
cell | Массив ячеек «1 на 1» преобразуется в одну ячейку | Многомерный массив ячеек преобразуется в | |
structure |
|
| MATLAB |
char | A 1 на 1 | А 1-by-L | Массивы символьных векторов не поддерживаются как |
sparse |
|
| Разреженный массив MATLAB преобразуется в |
double | Вещественная двойная матрица 1 на 1 преобразуется в | Вещественная многомерная двойная матрица преобразуется в | Сложные массивы передаются в и из скомпилированных функций MATLAB с помощью |
single | Вещественная единичная матрица 1 на 1 преобразуется в | Действительная многомерная единичная матрица преобразуется в | Сложные массивы передаются в и из скомпилированных функций MATLAB с помощью |
int8 | Вещественный 1 за 1 | Настоящая многомерность | Сложные массивы передаются в и из скомпилированных функций MATLAB с помощью |
uint8 | Вещественный 1 за 1 | Настоящая многомерность | Сложные массивы передаются в и из скомпилированных функций MATLAB с помощью |
int16 | Вещественный 1 за 1 | Настоящая многомерность | Сложные массивы передаются в и из скомпилированных функций MATLAB с помощью |
uint16 | Вещественный 1 за 1 | Настоящая многомерность | Сложные массивы передаются в и из скомпилированных функций MATLAB с помощью |
int32 | A 1 на 1 | Многомерное | Сложные массивы передаются в и из скомпилированных функций MATLAB с помощью |
uint32 | A 1 на 1 | Многомерное | Сложные массивы передаются в и из скомпилированных функций MATLAB с помощью |
Дескриптор функции |
|
| Не поддерживается |
Класс Java ® |
|
| Не поддерживается |
Класс пользователя |
|
| Не поддерживается |
логичный |
|
|
В следующей таблице перечислены правила преобразования из COM в MATLAB.
Правила преобразования COM VARIANT в MATLAB
VARIANT Напечатать | Тип данных MATLAB (скалярные данные или данные массива) | Комментарии |
|---|---|---|
VT_EMPTY | Неприменимо | Создан пустой массив. |
VT_I1 | int8 | |
VT_UI1 | uint8 | |
VT_I2 | int16 | |
VT_UI2 | uint16 | |
VT_I4 | int32 | |
VT_UI4 | uint32 | |
VT_R4 | single | |
VT_R8 | double | |
VT_CY | double | |
VT_BSTR | char | A |
VT_ERROR | int32 | |
VT_DATE | double | 1. |
VT_INT | int32 | |
VT_UINT | uint32 | |
VT_DECIMAL | double | |
VT_BOOL | logical | |
VT_DISPATCH | (варьируется) |
В настоящее время существует поддержка Excel
® |
< все что угодно>|VT_BYREF | (варьируется) | Указатели на любой из основных типов обрабатываются в соответствии с правилами, на которые они указывают. Результирующий массив MATLAB содержит глубокую копию значений. |
< все что угодно>|VT_ARRAY | (варьируется) | Многомерный |