В этом разделе описываются правила преобразования данных для 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
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 | - | Неинициализированный |
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
Тип данных MATLAB | Тип ВАРИАНТА для скалярных данных | Тип ВАРИАНТА для данных массива | Комментарии |
---|---|---|---|
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
Тип ВАРИАНТА | Тип данных 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 и ВАРИАНТУ COM к Правилам Преобразования 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
даты согласно правилу, перечисленному в Поддерживаемых Кодах Типа ВАРИАНТА. mwDateFormatString
отметьте преобразует VARIANT
дата к ее строковому представлению. Этот флаг только влияет на VARIANT
введите код VT_DATE
.
Этот флаг дает преобразователю данных команду обрабатывать выходной аргумент как дату. По умолчанию числовые даты, которые являются выходными параметрами от скомпилированных функций MATLAB, передаются как Double
s, который должен быть постепенно уменьшен смещением даты COM (693960), а также принужден на даты COM. Установите этот флаг на True
преобразовывать все выходные значения типа Double
.
Этот флаг устанавливает смещение даты для выполнения COM к MATLAB числовые преобразования даты. Значение по умолчанию этого свойства 693960, который представляет различие между Date
COM тип и MATLAB числовые даты. Этот флаг позволяет существующий код MATLAB, который уже выполняет шаг числовых дат 693 960, чтобы использоваться неизменный с компонентами. На даты процесса с таким кодом, набор это свойство к
0
.