Правила преобразования данных

Эта тема описывает правила преобразования данных для компонентов 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 COM s. переменные VARIANT являются сам описание и хранят свой код типа как внутреннее поле структуры.

В следующей таблице перечислены коды типа VARIANT, поддержанные компонентами MATLAB Compiler.

Поддерживаемые коды типа VARIANT

Код типа VARIANT
(C/C++)
Тип C/C++Код типа Variant
(Visual Basic)
Визуальный BasicTypeОпределение
VT_EMPTYvbEmpty

Неинициализированный VARIANT

VT_I1char

Однобайтовый символ со знаком

VT_UI1

char без знака

vbByteByte

Однобайтовый символ без знака

VT_I2shortvbIntegerInteger

Целое число 2D байта со знаком

VT_UI2unsigned short

Целое число 2D байта без знака

VT_I4longvbLongLong

Четырехбайтовое целое число со знаком

VT_UI4unsigned long

Четырехбайтовое целое число без знака

VT_R4floatvbSingleSingle

IEEE® четырехбайтовое значение с плавающей точкой

VT_R8doublevbDoubleDouble

IEEE восьмибайтовое значение с плавающей точкой

VT_CYCY +vbCurrencyCurrency

Значение валюты (64-битное целое число, масштабируемое 10 000)

VT_BSTRBSTR +vbStringString

Представьте значение в виде строки

VT_ERRORSCODE +vbError

HRESULT (подписал четырехбайтовое целое число, представляющее код ошибки COM),

VT_DATEDATE +vbDateDate

Восьмибайтовое значение с плавающей точкой, представляющее дату и время

VT_INTint

Целое число со знаком; эквивалентный, чтобы ввести int

VT_UINTunsigned int

Беззнаковое целое; эквивалентный, чтобы ввести unsigned int

VT_DECIMALDECIMAL +vbDecimal

96-битное (12-байтовое) беззнаковое целое, масштабируемое переменной мощностью 10

VT_BOOLVARIANT_BOOL +vbBooleanBoolean

Булево значение 2D байта (0xFFFF = Верный; 0x0000 = Ложь)

VT_DISPATCHIDispatch*vbObjectObject

Указатель IDispatch* на объект

VT_VARIANTVARIANT +vbVariantVariant

VARIANT (может только быть задан, если объединено с VT_BYREF или VT_ARRAY),

<anything>|VT_ARRAY

Поразрядно объедините VT_ARRAY с любым основным типом, чтобы объявить как массив

<anything>|VT_BYREF

Поразрядно объедините VT_BYREF с любым основным типом, чтобы объявить как ссылка на значение

+ Обозначает специфичный для Windows тип. Не часть стандартного C/C++.

В следующей таблице перечислены правила для преобразования от MATLAB до COM.

MATLAB к правилам преобразования COM VARIANT

Тип данных MATLABТип VARIANT для скалярных данныхТип VARIANT для данных массиваКомментарии
cell

Массив ячеек 1 на 1 преобразовывает в один VARIANT с типом, соответствующим правилу преобразования для типа данных MATLAB содержимого ячейки.

Многомерный массив ячеек преобразовывает в VARIANT типа VT_VARIANT|VT_ARRAY с типом каждого участника массивов, соответствующего правилу преобразования для типа данных MATLAB соответствующей ячейки.

structure

VT_DISPATCH

VT_DISPATCH

Массив struct MATLAB преобразован в объект MWStruct. (См. Класс MWStruct (MATLAB Compiler SDK)), Этот объект передается как тип VT_DISPATCH.

char

Матрица char 1 на 1 преобразовывает в VARIANT типа VT_BSTR с длиной строки = 1.

1 L матрицей char принят, чтобы представлять вектор символов длины L в MATLAB. Этот случай преобразовывает в VARIANT типа VT_BSTR с длиной строки = L. матрицы char больше чем одной строки, или более высокой размерности преобразовывают в VARIANT типа VT_BSTR|VT_ARRAY. Каждая строка в конвертированном массиве имеет длину 1 и соответствует каждому символу в исходной матрице.

Массивы векторов символов не поддержаны как матрицы char. Чтобы передать массив векторов символов, используйте массив ячеек 1 L матрицами char.

sparse

VT_DISPATCH

VT_DISPATCH

Разреженный массив MATLAB преобразован в объект MWSparse. (См. Класс MWSparse (MATLAB Compiler SDK)), Этот объект передается как тип VT_DISPATCH.

double

Действительная двойная матрица 1 на 1 преобразовывает в VARIANT типа VT_R8. Комплекс 1 на 1 удваивается, матрица преобразовывает в VARIANT типа VT_DISPATCH.

Действительная многомерная двойная матрица преобразовывает в VARIANT типа VT_R8|VT_ARRAY. Комплексная многомерная двойная матрица преобразовывает в VARIANT типа VT_DISPATCH.

Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса MWComplex. (См. Класс MWComplex),

single

Действительная одна матрица 1 на 1 преобразовывает в VARIANT типа VT_R4. Комплекс 1 на 1 одна матрица преобразовывает в VARIANT типа VT_DISPATCH.

Действительная многомерная одна матрица преобразовывает в VARIANT типа VT_R4|VT_ARRAY. Комплексная многомерная одна матрица преобразовывает в VARIANT типа VT_DISPATCH.

Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса MWComplex. (См. Класс MWComplex),

int8

Действительная матрица int8 1 на 1 преобразовывает в VARIANT типа VT_I1. Комплексная матрица int8 1 на 1 преобразовывает в VARIANT типа VT_DISPATCH.

Действительная многомерная матрица int8 преобразовывает в VARIANT типа VT_I1|VT_ARRAY. Комплексная многомерная матрица int8 преобразовывает в VARIANT типа VT_DISPATCH.

Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса MWComplex. (См. Класс MWComplex),

uint8

Действительная матрица uint8 1 на 1 преобразовывает в VARIANT типа VT_UI1. Комплексная матрица uint8 1 на 1 преобразовывает в VARIANT типа VT_DISPATCH.

Действительная многомерная матрица uint8 преобразовывает в VARIANT типа, VT_UI1|VT_ARRAY.A объединяет многомерную матрицу uint8, преобразовывает в VARIANT типа VT_DISPATCH.

Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса MWComplex. (См. Класс MWComplex),

int16

Действительная матрица int16 1 на 1 преобразовывает в VARIANT типа VT_I2. Комплексная матрица int16 1 на 1 преобразовывает в VARIANT типа VT_DISPATCH.

Действительная многомерная матрица int16 преобразовывает в VARIANT типа VT_I2|VT_ARRAY. Комплексная многомерная матрица int16 преобразовывает в VARIANT типа VT_DISPATCH.

Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса MWComplex. (См. Класс MWComplex),

uint16

Действительная матрица uint16 1 на 1 преобразовывает в VARIANT типа VT_UI2. Комплексная матрица uint16 1 на 1 преобразовывает в VARIANT типа VT_DISPATCH.

Действительная многомерная матрица uint16 преобразовывает в VARIANT типа VT_UI2|VT_ARRAY. Комплексная многомерная матрица uint16 преобразовывает в VARIANT типа VT_DISPATCH.

Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса MWComplex. (См. Класс MWComplex),

int32

Матрица int32 1 на 1 преобразовывает в VARIANT типа VT_I4. Комплексная матрица int32 1 на 1 преобразовывает в VARIANT типа VT_DISPATCH.

Многомерная матрица int32 преобразовывает в VARIANT типа VT_I4|VT_ARRAY. Комплексная многомерная матрица int32 преобразовывает в VARIANT типа VT_DISPATCH.

Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса MWComplex. (См. Класс MWComplex),

uint32

Матрица uint32 1 на 1 преобразовывает в VARIANT типа VT_UI4. Комплексная матрица uint32 1 на 1 преобразовывает в VARIANT типа VT_DISPATCH.

Многомерная матрица uint32 преобразовывает в VARIANT типа VT_UI4|VT_ARRAY. Комплексная многомерная матрица uint32 преобразовывает в VARIANT типа VT_DISPATCH.

Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса MWComplex. (См. Класс MWComplex),

Указатель на функцию

VT_EMPTY

VT_EMPTY

Не поддерживаемый

Класс Java®

VT_EMPTY

VT_EMPTY

Не поддерживаемый

Пользовательский класс

VT_EMPTY

VT_EMPTY

Не поддерживаемый

логический

VT_Bool

VT_Bool|VT_ARRAY

 

В следующей таблице перечислены правила для преобразования от COM до MATLAB.

ВАРИАНТ COM к правилам преобразования MATLAB

Тип VARIANTТип данных MATLAB (скалярные или данные массива)Комментарии
VT_EMPTY

Не применяется

Пустой массив создается.

VT_I1int8 
VT_UI1uint8 
VT_I2int16 
VT_UI2uint16 
VT_I4int32 
VT_UI4uint32 
VT_R4single 
VT_R8double 
VT_CYdouble 
VT_BSTRchar

VARIANT типа VT_BSTR преобразовывает в 1 L MATLAB массив char, где L = длина вектора символов, который будет преобразован. VARIANT типа VT_BSTR|VT_ARRAY преобразовывает в массив ячеек MATLAB 1 L массивами char.

VT_ERRORint32 
VT_DATEdouble

1. даты VARIANT хранятся, как удваивает запуск в полночь 31 декабря 1899. Даты MATLAB хранятся, как удваивает запуск в 0/0/00 0:00:00. Поэтому дата VARIANT 0,0 карт к MATLAB числовая дата 693 960,0. даты VARIANT преобразованы в MATLAB двойные типы и постепенно увеличены 693 960,0.
2. даты VARIANT могут быть опционально преобразованы в векторы символов. Смотрите Флаги Преобразования Данных для получения дополнительной информации о приведении типа.

VT_INTint32 
VT_UINTuint32 
VT_DECIMALdouble 
VT_BOOLlogical 
VT_DISPATCH

(отличается)

Указатели IDispatch* обработаны в контексте того, на что они указывают. Объекты должны поддерживаться типы с известной экстракцией данных и правилами преобразования, или представить типичное свойство Value, которое указывает на один тип VARIANT. Данные, извлеченные от объекта, преобразованы основанные на правилах для конкретного полученного VARIANT.

В настоящее время поддержка существует для объектов Excel® Range, а также MATLAB Compiler вводит MWStruct, MWComplex, MWSparse и MWArg.

<anything>|VT_BYREF

(отличается)

Указатели на любой из основных типов обрабатываются согласно правилам для того, на что они указывают. Получившийся массив MATLAB содержит глубокую копию значений.

<anything>|VT_ARRAY

(отличается)

Многомерные массивы VARIANT преобразовывают в многомерные массивы MATLAB, каждый элемент, преобразованный согласно правилам для основных типов. Многомерные массивы VARIANT типа VT_VARIANT|VT_ARRAY преобразовывают в многомерные массивы ячеек, каждая ячейка, преобразованная согласно правилам для того определенного типа.