Эта тема описывает правила преобразования данных для компонентов MATLAB® Compiler™. Этими компонентами являются двойные интерфейсные COM-объекты Microsoft®, которые поддерживают типы данных, совместимые с Автоматизацией.
Примечание
Automation (раньше названная Автоматизация OLE) является технологией, которая позволяет пакетам программного обеспечения отсоединять свои уникальные функции сценариям инструментов и других приложений. Автоматизация использует Объектную модель программных компонентов (COM), но может быть реализована независимо от других функций OLE, таких как активизация "на месте".
Когда метод вызывается на компонент MATLAB Compiler, входные параметры преобразованы в формат внутреннего массива MATLAB и переданы скомпилированной функции MATLAB. Когда функция выходит, выходные параметры преобразованы от формата внутреннего массива MATLAB до типов Автоматизации COM.
COM-клиент передает все аргументы ввода и вывода в скомпилированных функциях MATLAB как тип VARIANT
. VARIANT
COM тип является объединением нескольких простых типов данных. Тип
VARIANT
переменная может сохранить переменную любого из простых типов, а также массивов любого из этих значений.
Прикладной программный интерфейс (API) Win32 обеспечивает много функций для создания и управления VARIANT
s на C/C++ и Визуальном Basic® оказывает поддержку родного языка для этого типа.
Примечание
Это обсуждение данных относится к обоим VARIANT
и Variant
типы данных. VARIANT
имя C++ и Variant
соответствующий тип данных в Visual Basic.
См. Визуальную документацию Studio® для определений и поддержку API VARIANT
COMs.
VARIANT
переменные являются сам описание и хранят свой код типа как внутреннее поле структуры.
В следующей таблице перечислены VARIANT
введите коды, поддержанные компонентами MATLAB Compiler.
Поддерживаемые коды типа ВАРИАНТА
VARIANT Введите код(C/C++) | Тип C/C++ | Variant Введите код(Visual Basic) | Визуальный BasicType | Определение |
---|---|---|---|---|
VT_EMPTY | — | vbEmpty | — | Неинициализированный |
VT_I1 | char | — | — | Однобайтовый символ со знаком |
VT_UI1 |
| vbByte | Byte | Однобайтовый символ без знака |
VT_I2 | short | vbInteger | Integer | Целое число 2D байта со знаком |
VT_UI2 | unsigned short | — | — | Целое число 2D байта без знака |
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 | Булево значение 2D байта (0xFFFF = Верный; 0x0000 = Ложь) |
VT_DISPATCH | IDispatch* | vbObject | Object |
|
VT_VARIANT | VARIANT + | vbVariant | Variant |
|
<anything>|VT_ARRAY | — | — | — | Поразрядно объедините |
<anything>|VT_BYREF | — | — | — | Поразрядно объедините |
+ Обозначает специфичный для Windows тип. Не часть стандартного C/C++. |
В следующей таблице перечислены правила для преобразования от MATLAB до COM.
MATLAB к правилам преобразования ВАРИАНТА COM
Тип данных MATLAB | VARIANT Введите для скалярных данных | VARIANT Введите для данных массива | Комментарии |
---|---|---|---|
cell | Массив ячеек 1 на 1 преобразует в один | Многомерный массив ячеек преобразует в | |
structure |
|
|
|
char |
| 1 L | Массивы векторов символов не поддерживаются как |
sparse |
|
| Разреженный массив MATLAB преобразован в |
double | Действительная двойная матрица 1 на 1 преобразует в | Действительная многомерная двойная матрица преобразует в | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью |
single | Действительная одна матрица 1 на 1 преобразует в | Действительная многомерная одна матрица преобразует в | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью |
int8 | Действительный | Действительный многомерный | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью |
uint8 | Действительный | Действительный многомерный | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью |
int16 | Действительный | Действительный многомерный | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью |
uint16 | Действительный | Действительный многомерный | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью |
int32 |
| Многомерный | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью |
uint32 |
| Многомерный | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью |
Указатель на функцию |
|
| Не поддерживаемый |
Класс Java® |
|
| Не поддерживаемый |
Пользовательский класс |
|
| Не поддерживаемый |
логический |
|
|
В следующей таблице перечислены правила для преобразования от COM до MATLAB.
ВАРИАНТ COM к правилам преобразования 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 |
|
VT_ERROR | int32 | |
VT_DATE | double | 1. |
VT_INT | int32 | |
VT_UINT | uint32 | |
VT_DECIMAL | double | |
VT_BOOL | logical | |
VT_DISPATCH | (варьируется) |
В настоящее время поддержка существует для Excel®
|
<anything>|VT_BYREF | (варьируется) | Указатели на любой из основных типов обрабатываются согласно правилам для того, на что они указывают. Получившийся массив MATLAB содержит глубокую копию значений. |
<anything>|VT_ARRAY | (варьируется) | Многомерный |