В этом разделе описываются правила преобразования данных для 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 обеспечивает много функций для создания и управления VARIANT
s на C/C++, и Microsoft® Visual Basic® оказывает поддержку родного языка для этого типа. См. документацию Microsoft Visual Studio® для определений и поддержку API VARIANT
COM s. переменные VARIANT
являются сам описание и хранят свой код типа как внутреннее поле структуры.
Это обсуждение данных относится к VARIANT
и к типам данных Variant
. VARIANT
является именем C++, и Variant
является соответствующим типом данных в Visual Basic.
См. Коды Типа VARIANT, Поддержанные для списка кодов типа VARIANT
, поддержанных компонентами компилятора.
Смотрите MATLAB к Правилам Преобразования COM VARIANT и COM VARIANT к Правилам Преобразования MATLAB для правил преобразования между VARIANT
COM s и массивами MATLAB.
Поддерживаемые коды типа VARIANT
Код типа VARIANT (C/C++) | Тип C/C++ | Различный код типа (Visual Basic) | Тип Visual Basic | Определение |
---|---|---|---|---|
VT_EMPTY | - | vbEmpty | - | Неинициализированный |
VT_I1 | char | - | - | Однобайтовый символ со знаком |
VT_UI1 |
| vbByte | Byte | Однобайтовый символ без знака |
VT_I2 | short | vbInteger | Integer | Целое число 2D байта со знаком |
VT_UI2 | unsigned short | - | - | Целое число 2D байта без знака |
VT_I4 | long | vbLong | Long | Четырехбайтовое целое число со знаком |
VT_UI4 | unsigned long | - | - | Четырехбайтовое целое число без знака |
VT_R4 | float | vbSingle | Single | IEEE® четырехбайтовое значение с плавающей точкой |
VT_R8 | double | vbDouble | Double | IEEE восьмибайтовое значение с плавающей точкой |
VT_CY | CY + | vbCurrency | Currency | Значение валюты (64-битное целое число, масштабируемое 10 000) |
VT_BSTR | BSTR + | vbString | String | Представьте значение в виде строки |
VT_ERROR | SCODE + | vbError | - |
|
VT_DATE | DATE + | vbDate | Date | Восьмибайтовое значение с плавающей точкой, представляющее дату и время |
VT_INT | int | - | - | Целое число со знаком; эквивалентный, чтобы ввести |
VT_UINT | unsigned int | - | - | Беззнаковое целое; эквивалентный, чтобы ввести |
VT_DECIMAL | DECIMAL + | vbDecimal | - | 96-битное (12-байтовое) беззнаковое целое, масштабируемое переменной мощностью 10 |
VT_BOOL | VARIANT_BOOL + | vbBoolean | Boolean | Булево значение 2D байта (0xFFFF = Верный; 0x0000 = Ложь) |
VT_DISPATCH | IDispatch* | vbObject | Object | Указатель |
VT_VARIANT | VARIANT + | vbVariant | Variant |
|
<anything>|VT_ARRAY | Поразрядно объедините | |||
<anything>|VT_BYREF | Поразрядно объедините | |||
+ Обозначает определенный тип Windows®. Не часть стандартного C/C++. |
MATLAB к правилам преобразования COM VARIANT
Тип данных MATLAB | Тип VARIANT для скалярных данных | Тип VARIANT для данных массива | Комментарии |
---|---|---|---|
cell | Массив ячеек 1 на 1 преобразовывает в один | Многомерный массив ячеек преобразовывает в | |
structure |
|
| Массив |
char | Матрица | 1 L матрицей | Массивы строк не поддержаны как матрицы |
sparse |
|
| Разреженный массив MATLAB преобразован в объект |
double | Действительная двойная матрица 1 на 1 преобразовывает в | Действительная многомерная двойная матрица преобразовывает в | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса |
single | Действительная одна матрица 1 на 1 преобразовывает в | Действительная многомерная одна матрица преобразовывает в | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса |
int8 | Действительная матрица | Действительная многомерная матрица | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса |
uint8 | Действительная матрица | Действительная многомерная матрица | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса |
int16 | Действительная матрица | Действительная многомерная матрица | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса |
uint16 | Действительная матрица | Действительная многомерная матрица | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса |
int32 | Матрица | Многомерная матрица | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса |
uint32 | Матрица | Многомерная матрица | Комплексные массивы передаются и от скомпилированных функций MATLAB с помощью класса |
Указатель на функцию |
|
| Не поддерживаемый |
Класс Java® |
|
| Не поддерживаемый |
Пользовательский класс |
|
| Не поддерживаемый |
логический |
|
|
ВАРИАНТ COM к правилам преобразования MATLAB
Тип VARIANT | Тип данных MATLAB (Скалярные или данные массива) | Комментарии |
---|---|---|
VT_EMPTY | Нет данных | Пустой массив создается. |
VT_I1 | int8 |
|
VT_UI1 | uint8 |
|
VT_I2 | int16 |
|
VT_UI2 | uint16 |
|
VT_I4 | int32 |
|
VT_UI4 | uint32 |
|
VT_R4 | single |
|
VT_R8 | double |
|
VT_CY | double |
|
VT_BSTR | char |
|
VT_ERROR | int32 |
|
VT_DATE | double | Даты |
VT_INT | int32 |
|
VT_UINT | uint32 |
|
VT_DECIMAL | double |
|
VT_BOOL | logical |
|
VT_DISPATCH | Varies | Указатели В настоящее время поддержка существует для объектов Excel® |
anything |VT_BYREF | Varies | Указатели на любой из основных типов обрабатываются согласно правилам для того, на что они указывают. Получившийся массив MATLAB содержит глубокую копию значений. |
anything |VT_ARRAY | Varies | Многомерные массивы |
Компоненты имеют флаги, которые управляют, как данные массива отформатированы в обоих направлениях. Обычно необходимо разработать клиентский код, который совпадает с намеченными вводами и выводами функций MATLAB с соответствующими методами на скомпилированных COM-объектах, в соответствии с правилами, перечисленными в MATLAB к Правилам Преобразования COM VARIANT и COM VARIANT к Правилам Преобразования MATLAB. В некоторых случаях это не возможно, например, когда существующий код MATLAB используется в сочетании со сторонним продуктом как Excel.
Следующая таблица показывает флаги форматирования массивов.
Флаги форматирования массивов
Флаг | Описание |
---|---|
| Задает правило форматирования массивов, использованное на входных массивах.
|
| Устанавливает косвенный уровень входного массива, используемый с флагом |
| Задает правило форматирования массивов, использованное на выходных массивах. Выходной массив является массивом MATLAB, созданным скомпилированным COM-объектом, отправленным как выходной параметр от вызова метода до клиента. Значения для этого флага, |
| (Применяется к вложенным массивам ячеек только.) Косвенный уровень выходного массива используется с флагом |
| (Применяется к областям значений Excel только.), Когда целевой вывод от вызова метода является областью значений ячеек в рабочем листе Excel и размере выходного массива и форме, не известен во время вызова, установите этот флаг на |
| Установите этот флаг на |
Компоненты MATLAB Compiler SDK содержат флаги, чтобы управлять преобразованием определенных типов VARIANT
к типам MATLAB. Эти флаги следующие:
Этот флаг говорит преобразователю данных преобразовывать все числовые данные 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
, преобразовывает числовые данные согласно правилам, перечисленным в Преобразовании Данных.
Этот флаг говорит преобразователь данных, как преобразовать даты VARIANT
в даты MATLAB. Допустимыми значениями для этого флага является mwDateFormatNumeric
(значение по умолчанию) и mwDateFormatString
. Значение по умолчанию преобразовывает даты VARIANT
согласно правилу, перечисленному в Поддерживаемых Кодах Типа VARIANT. Флаг mwDateFormatString
преобразовывает дату VARIANT
в свое строковое представление. Этот флаг только влияет на код типа VARIANT
VT_DATE
.
Этот флаг дает преобразователю данных команду обрабатывать выходной аргумент как дату. По умолчанию числовые даты, которые являются выходными параметрами от скомпилированных функций MATLAB, передаются как Double
s, который должен быть постепенно уменьшен смещением даты COM (693960), а также принужден на даты COM. Установите этот флаг на True
преобразовывать все выходные значения типа Double
.
Этот флаг устанавливает смещение даты для выполнения COM к MATLAB числовые преобразования даты. Значение по умолчанию этого свойства 693960, который представляет различие между типом Date
COM и MATLAB числовые даты. Этот флаг позволяет существующий код MATLAB, который уже выполняет шаг числовых дат 693 960, чтобы использоваться неизменный с компонентами. На даты процесса с таким кодом, набор это свойство к 0
.