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

В этом разделе описываются правила преобразования данных для MATLAB® Compiler™ компоненты. Эти компоненты являются двумя интерфейсами 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 - имя и Variant C++ - соответствующий тип данных в Visual Basic.

Смотрите Visual Studio® документация для определений и поддержка API для COM- VARIANTс. VARIANT переменные являются самоописывающимися и хранят их код типа как внутреннее поле структуры.

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

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

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

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

VT_I1char

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

VT_UI1

неподписанные char

vbByteByte

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

VT_I2shortvbIntegerInteger

Двухбайтовое целое число со знаком

VT_UI2unsigned short

Беззнаковое двухбайтовое целое число

VT_I4longvbLongLong

Подписанное четырехбайтовое целое число

VT_UI4unsigned long

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

VT_R4floatvbSingleSingle

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

VT_R8doublevbDoubleDouble

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

VT_CYCY+vbCurrencyCurrency

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

VT_BSTRBSTR+vbStringString

Строковое значение

VT_ERRORSCODE+vbError

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

VT_DATEDATE+vbDateDate

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

VT_INTint

Целое число со знаком; эквивалентно типу int

VT_UINTunsigned int

Беззнаковое целое число; эквивалентно типу unsigned int

VT_DECIMALDECIMAL+vbDecimal

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

VT_BOOLVARIANT_BOOL+vbBooleanBoolean

Двухбайтовое логическое значение (0xFFFF = True; 0x0000 = Ложь)

VT_DISPATCHIDispatch*vbObjectObject

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

VT_VARIANTVARIANT+vbVariantVariant

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

< все >|VT_ARRAY

Битовое объединение VT_ARRAY с любым базовым типом для объявления в виде массива

< все >|VT_BYREF

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

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

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

Правила преобразования MATLAB в COM-варианты

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

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

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

structure

VT_DISPATCH

VT_DISPATCH

A MATLAB struct массив преобразуется в MWStruct объект. (См. Class MWStruct (MATLAB Compiler SDK)) Этот объект передается как VT_DISPATCH тип.

char

A 1 на 1 char матрица преобразуется в VARIANT типа VT_BSTR с длиной строки = 1.

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

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

sparse

VT_DISPATCH

VT_DISPATCH

Разреженный массив MATLAB преобразуется в MWSparse объект. (См. Class 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. Комплексный метод 1 на 1 int8 матрица преобразуется в VARIANT типа VT_DISPATCH.

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

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

uint8

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

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

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

int16

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

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

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

uint16

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

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

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

int32

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

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

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

uint32

A 1 на 1 uint32 матрица преобразуется в VARIANT типа VT_UI4. Комплексный метод 1 на 1 uint32 матрица преобразуется в 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 VARIANT в правила преобразования 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

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

VT_ERRORint32 
VT_DATEdouble

1. VARIANT даты хранятся в виде двойников, начиная с полуночи 31 декабря 1899 года. Даты MATLAB хранятся как удвоенные начиная с 0/0/00 00:00:00. Поэтому a VARIANT дата 0.0 карт на числовую дату MATLAB 693960.0. VARIANT даты преобразуются в двойные типы MATLAB и увеличиваются на 693960.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.

< все >|VT_BYREF

(изменяется)

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

< все >|VT_ARRAY

(изменяется)

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