exponenta event banner

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

В этом разделе описываются правила преобразования данных для компонентов 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_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(четырехбайтовое целое число со знаком, представляющее код ошибки COM)

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 VARIANT

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

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

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

structure

VT_DISPATCH

VT_DISPATCH

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

char

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

А 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

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

Настоящая многомерность int8 матрица преобразуется в VARIANT типа VT_I1|VT_ARRAY. Сложный многомерный int8 матрица преобразуется в VARIANT типа VT_DISPATCH.

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

uint8

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

Настоящая многомерность uint8 матрица преобразуется в VARIANT типа VT_UI1|VT_ARRAY. Сложный многомерный uint8 матрица преобразуется в VARIANT типа VT_DISPATCH.

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

int16

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

Настоящая многомерность int16 матрица преобразуется в VARIANT типа VT_I2|VT_ARRAY. Сложный многомерный int16 матрица преобразуется в VARIANT типа VT_DISPATCH.

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

uint16

Вещественный 1 за 1 uint16 матрица преобразуется в 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 MATLAB char массив, где 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 MWStruct, MWComplex, MWSparse, и MWArg.

< все что угодно>|VT_BYREF

(варьируется)

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

< все что угодно>|VT_ARRAY

(варьируется)

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