В этом разделе описываются правила преобразования данных для COM- компонентов, созданных с помощью MATLAB® Compiler SDK™ продукт. Эти компоненты являются COM-объектами с двумя интерфейсами, которые поддерживают типы данных, совместимые с автоматизацией.
Примечание
Automation (ранее называвшаяся OLE Automation) - технология, позволяющая пакетам программного обеспечения открывать свои уникальные функции инструментам скриптирования и другим приложениям. Автоматизация использует Объектную модель программных компонентов (COM), но может быть реализована независимо от других функций OLE, таких как активация на месте.
Внимание
Следует иметь в виду, что служба IIS (Internet Information Service) обычно препятствует большей части автоматизации COM на базисный, что она может представлять угрозу безопасности. Поэтому XLSREAD
и другие службы автоматизации могут отказать при обслуживании IIS, приводя к таким ошибкам, как object reference not set
.
Когда метод вызывается на компоненте MATLAB Compiler SDK, входные параметры преобразуются во внутренний формат массива MATLAB и передаются в скомпилированную функцию MATLAB. Когда функция выходит, выходные параметры преобразуются из формата внутреннего массива MATLAB в типы COM Automation.
COM-клиент передает все входные и выходные аргументы в скомпилированных функциях MATLAB как тип VARIANT
. COM- VARIANT
type является объединением нескольких простых типов данных. Тип VARIANT
переменная может хранить переменную любого из простых типов, а также массивы любых из этих значений.
API Win32 предоставляет много функций для создания и манипулирования VARIANT
s в C/C + + и Microsoft® Визуальный базовый® обеспечивает поддержку на родном языке для этого типа. Смотрите Microsoft Visual Studio® документация для определений и поддержка API для COM- VARIANT
с. VARIANT
переменные являются самоописывающимися и хранят их код типа как внутреннее поле структуры.
Примечание
Это обсуждение данных относится к обоим VARIANT
и Variant
типы данных. VARIANT
- имя и Variant
C++ - соответствующий тип данных в Visual Basic.
Список поддерживаемых кодов типов VARIANT VARIANT
коды типов, поддерживаемые компонентами компилятора.
Правила преобразования между COM см. в MATLAB в COM VARIANT Conversion Rules и COM VARIANT в MATLAB Conversion Rules VARIANT
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 | Двухбайтовое целое число со знаком |
VT_UI2 | unsigned short | - | - | Беззнаковое двухбайтовое целое число |
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 | Двухбайтовое логическое значение (0xFFFF = True; 0x0000 = Ложь) |
VT_DISPATCH | IDispatch* | vbObject | Object |
|
VT_VARIANT | VARIANT + | vbVariant | Variant |
|
< все >|VT_ARRAY | Битовое объединение | |||
< все >|VT_BYREF | Битовое объединение | |||
+ Обозначает Windows® конкретного типа. Не является частью стандартного C/C + +. |
Правила преобразования MATLAB в COM-варианты
Тип данных MATLAB | ТИП ВАРИАНТА для скалярных данных | ТИП ВАРИАНТА для данных массива | Комментарии |
---|---|---|---|
cell | Массив ячеек 1 на 1 преобразуется в одну | Многомерный массив ячеек преобразуется в | |
structure |
|
| A MATLAB |
char | A 1 на 1 | A 1-by-L | Массивы строк не поддерживаются как |
sparse |
|
| Разреженный массив MATLAB преобразуется в |
double | Действительная двойная матрица 1 на 1 преобразуется в | Действительная многомерная двойная матрица преобразуется в | Комплексные массивы передаются в скомпилированные функции MATLAB и из них с помощью |
single | Действительная одинарная матрица 1 на 1 преобразуется в | Действительная многомерная одинарная матрица преобразуется в | Комплексные массивы передаются в скомпилированные функции MATLAB и из них с помощью |
int8 | Действительное | Действительное многомерное | Комплексные массивы передаются в скомпилированные функции MATLAB и из них с помощью |
uint8 | Действительное | Действительное многомерное | Комплексные массивы передаются в скомпилированные функции MATLAB и из них с помощью |
int16 | Действительное | Действительное многомерное | Комплексные массивы передаются в скомпилированные функции MATLAB и из них с помощью |
uint16 | Действительное | Действительное многомерное | Комплексные массивы передаются в скомпилированные функции MATLAB и из них с помощью |
int32 | A 1 на 1 | Многомерное | Комплексные массивы передаются в скомпилированные функции MATLAB и из них с помощью |
uint32 | A 1 на 1 | Многомерное | Комплексные массивы передаются в скомпилированные функции MATLAB и из них с помощью |
Указатель на функцию |
|
| Не поддерживается |
Java® класс |
|
| Не поддерживается |
Класс пользователя |
|
| Не поддерживается |
логичный |
|
|
COM VARIANT в правила преобразования 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 | A |
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
, преобразует числовые данные согласно правилам, перечисленным в Data Conversion.
Этот флаг сообщает конвертеру данных, как преобразовать VARIANT
даты к датам MATLAB. Допустимые значения для этого флага mwDateFormatNumeric
(по умолчанию) и mwDateFormatString
. Значение по умолчанию преобразует VARIANT
даты согласно правилу, указанному в Поддерживаемых кодах типов ВАРИАНТОВ. The mwDateFormatString
флаг преобразует VARIANT
датируется своим строковым представлением. Этот флаг влияет только на VARIANT
введите код VT_DATE
.
Этот флаг предписывает конвертеру данных обработать выходной аргумент в качестве даты. По умолчанию числовые даты, которые являются выходными параметрами из скомпилированных функций MATLAB, передаются как Double
s, которые должны быть уменьшены смещением даты COM (693960), а также принуждены к датам COM. Установите этот флаг равным True
для преобразования всех выходных значений типа Double
.
Этот флаг устанавливает смещение даты для выполнения числовых преобразований COM в MATLAB. Значение по умолчанию этого свойства является 693960, что представляет различие между COM- Date
введите и числовые даты MATLAB. Этот флаг позволяет использовать существующий код MATLAB, который уже выполняет шаг числовых дат на 693960, без изменений с компонентами. Чтобы обработать даты с таким кодом, установите это свойство на 0
.