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

Эта тема описывает правила преобразования данных для компонентов MATLAB® Compiler™. Этими компонентами являются двойные интерфейсные COM-объекты Microsoft®, которые поддерживают типы данных, совместимые с Автоматизацией.

Примечание

Automation (раньше названная Автоматизация OLE) является технологией, которая позволяет пакетам программного обеспечения отсоединять свои уникальные функции сценариям инструментов и других приложений. Автоматизация использует Объектную модель программных компонентов (COM), но может быть реализована независимо от других функций OLE, таких как активизация "на месте".

Когда метод вызывается на компонент MATLAB Compiler, входные параметры преобразованы в формат внутреннего массива MATLAB и переданы скомпилированной функции MATLAB. Когда функция выходит, выходные параметры преобразованы от формата внутреннего массива MATLAB до типов Автоматизации COM.

COM-клиент передает все аргументы ввода и вывода в скомпилированных функциях MATLAB как тип VARIANT. VARIANT COM тип является объединением нескольких простых типов данных. Тип VARIANT переменная может сохранить переменную любого из простых типов, а также массивов любого из этих значений.

Прикладной программный интерфейс (API) Win32 обеспечивает много функций для создания и управления VARIANTs на 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_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

Тип данных MATLABVARIANT Введите для скалярных данных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 преобразуйте в многомерные массивы ячеек, каждая ячейка, преобразованная согласно правилам для того определенного типа.