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

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

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

Примечание

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

Внимание

Следует иметь в виду, что IIS (интернет-Информационная служба) обычно предотвращает большую часть автоматизации COM на базисе, что это может изложить угрозу безопасности. Поэтому XLSREAD и другие услуги по Автоматизации могут перестать работать, когда подается IIS, ведя к ошибкам, таким как object reference not set.

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

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

Win32 API обеспечивает много функций для создания и управления VARIANTs на C/C++ и Microsoft® Visual Basic® оказывает поддержку родного языка для этого типа. Смотрите Microsoft Visual Studio® документация для определений и API поддерживает для VARIANT COMs. VARIANT переменные являются сам описание и хранят свой код типа как внутреннее поле структуры.

Примечание

Это обсуждение данных относится к обоим VARIANT и Variant типы данных. VARIANT имя C++ и Variant соответствующий тип данных в Visual Basic.

См. Коды Типа ВАРИАНТА, Поддержанные для списка VARIANT введите коды, поддержанные компонентами компилятора.

Смотрите MATLAB к Правилам Преобразования ВАРИАНТА COM и ВАРИАНТУ COM к Правилам Преобразования MATLAB для правил преобразования между VARIANT COMs и массивы MATLAB.

Поддерживаемые коды типа ВАРИАНТА

Код типа ВАРИАНТА
(C/C++)
Тип C/C++Различный код типа (Visual Basic)Тип Visual BasicОпределение
VT_EMPTY-vbEmpty-

Неинициализированный 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Тип ВАРИАНТА для скалярных данныхТип ВАРИАНТА для данных массиваКомментарии
cell

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

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

structure

VT_DISPATCH

VT_DISPATCH

struct MATLAB массив преобразован в MWStruct объект. (См. Класс MWStruct.) Этот объект передается как 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.) Этот объект передается как 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 класс.

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 класс.

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 класс.

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 класс.

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 класс.

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 класс.

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 класс.

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

VT_EMPTY

VT_EMPTY

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

Java® класс

VT_EMPTY

VT_EMPTY

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

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

VT_EMPTY

VT_EMPTY

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

логический

VT_Bool

VT_Bool|VT_ARRAY

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

Тип ВАРИАНТАТип данных MATLAB (Скалярные или данные массива)Комментарии
VT_EMPTY

N/A

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

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

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

VARIANT даты могут быть опционально преобразованы в строки. Смотрите Флаги Преобразования Данных для получения дополнительной информации о приведении типа.

VT_INTint32

VT_UINTuint32

VT_DECIMALdouble

VT_BOOLlogical

VT_DISPATCHVaries

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

В настоящее время поддержка существует для Excel® Range объекты, а также типы MWStruct, MWComplex, MWSparse, и MWArg. Смотрите Ссылочные Служебные Классы для получения информации о типах, чтобы использовать с COM-компонентами.

anything|VT_BYREFVaries

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

anything|VT_ARRAYVaries

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

Флаги форматирования массивов

Компоненты имеют флаги, которые управляют, как данные массива отформатированы в обоих направлениях. Обычно необходимо разработать клиентский код, который совпадает с намеченными вводами и выводами функций MATLAB с соответствующими методами на скомпилированных COM-объектах, в соответствии с правилами, перечисленными в MATLAB к Правилам Преобразования ВАРИАНТА COM и ВАРИАНТУ COM к Правилам Преобразования MATLAB. В некоторых случаях это не возможно, например, когда существующий код MATLAB используется в сочетании со сторонним продуктом как Excel.

Следующая таблица показывает флаги форматирования массивов.

Флаги форматирования массивов

Флаг Описание

InputArrayFormat

Задает правило форматирования массивов, использованное на входных массивах.
Входным массивом является VARIANT массив, созданный клиентом, отправленным как входной параметр в вызов метода на скомпилированном COM-объекте.

Допустимыми значениями для этого флага является mwArrayFormatAsIs, mwArrayFormatMatrix, и mwArrayFormatCell.

mwArrayFormatAsIs передает неизменный массив.

mwArrayFormatMatrix форматы (по умолчанию) все массивы как матрицы. Когда вход VARIANT имеет тип VT_ARRAY| type, где type любой числовой тип, этот флаг не оказывает влияния. Когда вход VARIANT имеет тип VT_VARIANT|VT_ARRAY, VARIANTs в массиве исследованы. Если они являются однозначными и гомогенными в типе, матрица MATLAB соответствующего типа производится вместо массива ячеек.

mwArrayFormatCell интерпретирует все массивы как массивы ячеек MATLAB.

InputArrayIndFlag

Устанавливает косвенный уровень входного массива, используемый с InputArrayFormat флаг (применимый только к вложенным массивам, т.е. VARIANT массивы VARIANTs, которые самостоятельно являются массивами). Значением по умолчанию для этого флага является нуль, который применяет InputArrayFormat отметьте к наиболее удаленному массиву. Когда этот флаг больше нуля, e.g., равный N, правило форматирования пытается применить себя к Энному уровню вложения.

OutputArrayFormat

Задает правило форматирования массивов, использованное на выходных массивах. Выходной массив является массивом MATLAB, созданным скомпилированным COM-объектом, отправленным как выходной параметр от вызова метода до клиента. Значения для этого флага, mwArrayFormatAsIs, mwArrayFormatMatrix, и mwArrayFormatCell, вызовите то же поведение как соответствующий InputArrayFormat флаговые значения.

OutputArrayIndFlag

(Применяется к вложенным массивам ячеек только.) Косвенный уровень выходного массива используется с OutputArrayFormat флаг. Этот флаг работает точно как InputArrayIndFlag.

AutoResizeOutput

(Применяется к областям значений Excel только.), Когда целевой выход от вызова метода является областью значений ячеек в рабочем листе Excel и размере выходного массива и форме, не известен во время вызова, установите этот флаг на True изменить размер каждой области значений Excel, чтобы соответствовать выходному массиву.

TransposeOutput

Установите этот флаг на True транспонировать выходные аргументы. Полезный при вызове компонента от Excel, где функция MATLAB возвращает выходные параметры как векторы-строки, и вы хотите данные в столбцах.

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

Компоненты MATLAB Compiler SDK содержат флаги, чтобы управлять преобразованием определенного VARIANT типы к типам MATLAB. Эти флаги следующие:

CoerceNumericToType

Этот флаг говорит преобразователю данных преобразовывать весь числовой VARIANT данные к одному определенному типу MATLAB. VARIANT кодами типа, затронутыми этим флагом, является VT_I1, VT_UI1, VT_I2, VT_UI2, VT_I4, VT_UI4, VT_R4, VT_R8, VT_CY, VT_DECIMAL, VT_INT, VT_UINT, VT_ERROR, VT_BOOL, и VT_DATE. Допустимыми значениями для этого флага является mwTypeDefault, mwTypeChar, mwTypeDouble, mwTypeSingle, mwTypeLogical, mwTypeInt8, mwTypeUint8, mwTypeInt16, mwTypeUint16, mwTypeInt32, и mwTypeUint32.

Значение по умолчанию для этого флага, mwTypeDefault, преобразует числовые данные согласно правилам, перечисленным в Преобразовании Данных.

InputDateFormat

Этот флаг говорит преобразователь данных, как преобразовать VARIANT даты на даты MATLAB. Допустимыми значениями для этого флага является mwDateFormatNumeric (значение по умолчанию) и mwDateFormatString. Значение по умолчанию преобразует VARIANT даты согласно правилу, перечисленному в Поддерживаемых Кодах Типа ВАРИАНТА. mwDateFormatString отметьте преобразует VARIANT дата к ее строковому представлению. Этот флаг только влияет на VARIANT введите код VT_DATE.

OutputAsDate как Boolean

Этот флаг дает преобразователю данных команду обрабатывать выходной аргумент как дату. По умолчанию числовые даты, которые являются выходными параметрами от скомпилированных функций MATLAB, передаются как Doubles, который должен быть постепенно уменьшен смещением даты COM (693960), а также принужден на даты COM. Установите этот флаг на True преобразовывать все выходные значения типа Double.

DateBias как долго

Этот флаг устанавливает смещение даты для выполнения COM к MATLAB числовые преобразования даты. Значение по умолчанию этого свойства 693960, который представляет различие между Date COM тип и MATLAB числовые даты. Этот флаг позволяет существующий код MATLAB, который уже выполняет шаг числовых дат 693 960, чтобы использоваться неизменный с компонентами. На даты процесса с таким кодом, набор это свойство к 0.