Обработка данных COM в MATLAB

Передайте данные COM-объектам

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

MATLAB преобразует аргументы MATLAB в типы, которые лучше всего представляют данные COM-объекту. Следующая таблица показывает все базовые типы MATLAB для передаваемых аргументов и типов COM, заданных для входных параметров. Каждая строка показывает тип MATLAB, сопровождаемый возможными соответствиями аргумента COM. Для описания типов варианта COM смотрите, что таблица в Обрабатывает Данные от COM-объектов.

Аргумент MATLABСамый близкий тип COMПозволенные типы
указательVT_DISPATCH
VT_UNKNOWN
VT_DISPATCH
VT_UNKNOWN
символьный вектор VT_BSTRVT_LPWSTR
VT_LPSTR
VT_BSTR
VT_FILETIME
VT_ERROR
VT_DECIMAL
VT_CLSID
VT_DATE
int16 VT_I2VT_I2
uint16VT_UI2VT_UI2
int32VT_I4VT_I4
VT_INT
uint32VT_UI4VT_UI4
VT_UINT
int64VT_I8VT_I8
uint64VT_UI8VT_UI8
singleVT_R4VT_R4
double VT_R8VT_R8
VT_CY
logicalVT_BOOL VT_BOOL
'char' VT_I1VT_I1
VT_UI1

Различные данные

variant любой тип данных кроме структуры или разреженного массива. (Для получения дополнительной информации смотрите Основной принцип Классы MATLAB.)

Когда используется в качестве входного параметра, MATLAB обрабатывает variant и variant(указатель) тот же путь.

Если вы передаете пустой массив ([]) из типа double, MATLAB создает variant(указатель) набор к VT_EMPTY. Передача пустого массива любого другого числового типа не поддерживается.

Аргумент MATLABСамый близкий тип COMПозволенные типы
variant VT_VARIANTVT_VARIANT
VT_USERDEFINED
VT_ARRAY
variantУказательVT_VARIANTVT_VARIANT | VT_BYREF

Данные SAFEARRAY

Когда метод COM идентифицирует SAFEARRAY или SAFEARRAY(указатель), эквивалентный MATLAB является матрицей.

Аргумент MATLABСамый близкий тип COMПозволенные типы
SAFEARRAYVT_SAFEARRAYVT_SAFEARRAY
SAFEARRAYУказатель VT_SAFEARRAYVT_SAFEARRAY | VT_BYREF

Обработайте данные от COM-объектов

Данные, возвращенные в COM-объект, часто несовместимы с типами MATLAB. Когда это происходит, MATLAB преобразует возвращенное значение в собственный компонент типа данных языка MATLAB. В этом разделе описываются преобразование, выполняемое на различных типах, которые могут быть возвращены в COM-объекты.

Следующая таблица показывает, как MATLAB преобразует данные из COM-объекта в переменные MATLAB.

Тип варианта COM

Описание

Представление MATLAB

VT_DISPATCH

IDispatch *

указатель
VT_LPWSTR
VT_LPSTR
VT_BSTR
VT_FILETIME
VT_ERROR
VT_DECIMAL
VT_CLSID
VT_DATE

широкий null отключенная строка
null отключенная строка
Строка Автоматизации OLE
FILETIME
SCODE
16-байтовая фиксированная точка
ID класса
дата

символьный вектор
VT_INT
VT_UINT
VT_I2
VT_UI2
VT_I4
VT_UI4
VT_R4
VT_R8
VT_CY

signed machine int
unsigned machine int
2-байтовый signed int
unsigned short
4-байтовый signed int
unsigned long
4-байтовый real
8-байтовый real
валюта

double
VT_I8

signed int64

int64
VT_UI8

unsigned int64

uint64
VT_BOOL  logical
VT_I1
VT_UI1
signed char
unsigned char
'char'
VT_VARIANT
VT_USERDEFINED
VT_ARRAY

VARIANT *
пользовательский тип
SAFEARRAY*

variant
VT_VARIANT | VT_BYREF

VARIANT *
void* для локального использования

variantУказатель
VT_SAFEARRAY

используйте VT_ARRAY в VARIANT

SAFEARRAY
VT_SAFEARRAY | VT_BYREF SAFEARRAYУказатель

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

MATLAB не поддерживает следующие типы COM-интерфейса.

  • Структура

  • Разреженный массив

  • Многомерный SAFEARRAYs (больше, чем две размерности)

  • Свойства только для записи

Передайте MATLAB SAFEARRAY COM-объекту

SAFEARRAY тип данных является стандартным способом передать массивы между COM-объектами. Этот раздел объясняет, как MATLAB передает SAFEARRAY данные к COM-объекту.

Поведение по умолчанию в MATLAB

MATLAB представляет m- n матрица как двумерный SAFEARRAY, где первая размерность имеет m элементы и второе измерение имеют n элементы. MATLAB передает SAFEARRAY значением.

Примеры

Следующие примеры используют COM-объект, который ожидает SAFEARRAY введите параметр.

Когда MATLAB передает 1- 3 массив:

B = [2 3 4]
B =
     2     3     4

объектные чтения:

No. of dimensions: 2
Dim: 1, 	 No. of elements: 1 
Dim: 2, 	 No. of elements: 3 
	 	 Elements: 
	 	 2.0 
	 	 3.0 
	 	 4.0

Когда MATLAB передает 3- 1 массив:

C = [1;2;3]
C =
     1
     2
     3

объектные чтения:

No. of dimensions: 2
Dim: 1, 	 No. of elements: 3 
Dim: 2, 	 No. of elements: 1 
Elements: 
	 	 1.0 
	 	 2.0 
	 	 3.0

Когда MATLAB передает 2- 4 массив:

D = [2 3 4 5;5 6 7 8]

D =
     2     3     4     5
     5     6     7     8

объектные чтения:

No. of dimensions: 2
Dim: 1, 	 No. of elements: 2 
Dim: 2, 	 No. of elements: 4 
Elements: 
	 	 2.0 
	 	 3.0 
	 	 4.0 
	 	 5.0 
	 	 5.0 
	 	 6.0 
	 	 7.0 
	 	 8.0

Передайте Одно Размерность SAFEARRAY

Для получения информации смотрите, Как я могу передать аргументы серверу ActiveX от MATLAB 7.0 (R14) как одномерные массивы?

Передайте SAFEARRAY ссылкой

Для получения информации смотрите, Как я могу передать аргументы в отношении сервера ActiveX от MATLAB 7.0 (R14)?

Считайте SAFEARRAY из COM-объектов в приложениях MATLAB

Этот раздел объясняет, как MATLAB читает SAFEARRAY данные из COM-объекта.

MATLAB читает одномерный SAFEARRAY с n элементы от COM-объекта как 1- n матрица.

MATLAB читает двумерный SAFEARRAY с n элементы как 2- n матрица.

MATLAB читает 3D SAFEARRAY с двумя элементами как 2- 2- 2 cellArray.

Отобразите синтаксис MATLAB для COM-объектов

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

Рассмотрите сервер под названием MyApp, который имеет отдельный метод TestMeth1 со следующим синтаксисом:

HRESULT TestMeth1 ([out, retval] double* dret);

Этот метод не имеет никакого входного параметра, и он возвращает переменную типа double. Следующий pseudo-code отображает синтаксис MATLAB для вызова метода.

h = actxserver('MyApp');
invoke(h)

Отображения MATLAB:

ans = 
   TestMeth1 = double TestMeth1 (handle)

Подпись TestMeth1 :

double TestMeth1(handle)

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

Используйте одну из следующих команд pseudo-code, чтобы создать переменную var, который имеет тип double.

var = h.TestMeth1;

или:

var = TestMeth1(h);

Несмотря на то, что следующий синтаксис правилен, его использованию препятствуют:

var = invoke(h,'TestMeth1');

Теперь рассмотрите сервер под названием MyApp1 со следующими методами:

HRESULT TestMeth1 ([out, retval] double* dret);
HRESULT TestMeth2 ([in] double* d, [out, retval] double* dret);
HRESULT TestMeth3 ([out] BSTR* sout,
                   [in, out] double* dinout,
                   [in, out] BSTR* sinout,
                   [in] short sh,
                   [out] long* ln,
                   [in, out] float* b1,
                   [out, retval] double* dret);

Используя invoke функция, MATLAB отображает список методов:

ans = 
   TestMeth1 = double TestMeth1 (handle)
   TestMeth2 = double TestMeth2 (handle, double)
   TestMeth3 = [double, string, double, string, int32, single] ...
               TestMeth3(handle, double, string, int16, single)

TestMeth2 требует входного параметра d из типа double, и возвращает переменную dret из типа double. Некоторые примеры pseudo-code вызова TestMeth2 :

var = h.TestMeth2(5);

или:

var = TestMeth2(h, 5);

TestMeth3 требует нескольких входных параметров, как обозначено в круглых скобках на правой стороне знака "равно", и возвращает несколько выходных аргументов, как обозначено в скобках на левой стороне знака "равно".

[double, string, double, string, int32, single]  %output arguments
TestMeth3(handle, double, string, int16, single) %input arguments

Первым входным параметром является необходимый handle, сопровождаемый четырьмя входными параметрами.

TestMeth3(handle, in1, in2, in3, in4)

Первым выходным аргументом является возвращаемое значение retval, сопровождаемый пятью выходными аргументами.

[retval, out1, out2, out3, out4, out5]

Это - то, как аргументы сопоставляют в команду MATLAB:

[dret, sout, dinout, sinout, ln, b1] = TestMeth3(handle, ...
                                       dinout, sinout, sh, b1)

где dret double, sout isstring, dinout double и и вход и выходной аргумент, sinout isstring (аргумент ввода и вывода), ln int32, b1 single (аргумент ввода и вывода), handle указатель на объект и sh int16.