Когда вы используете 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_BSTR | VT_LPWSTR VT_LPSTR VT_BSTR VT_FILETIME VT_ERROR VT_DECIMAL VT_CLSID VT_DATE |
int16 |
VT_I2 | VT_I2 |
uint16 | VT_UI2 | VT_UI2 |
int32 | VT_I4 | VT_I4 VT_INT |
uint32 | VT_UI4 | VT_UI4 VT_UINT |
int64 | VT_I8 | VT_I8 |
uint64 | VT_UI8 | VT_UI8 |
single | VT_R4 | VT_R4 |
double |
VT_R8 | VT_R8 VT_CY
|
logical | VT_BOOL
| VT_BOOL |
'char' |
VT_I1 | VT_I1 VT_UI1 |
variant
любой тип данных кроме структуры или разреженного массива. (Для получения дополнительной информации смотрите Основной принцип Классы MATLAB.)
Когда используется в качестве входного параметра, MATLAB обрабатывает variant
и variant
(указатель) тот же путь.
Если вы передаете пустой массив ([]
) из типа double
, MATLAB создает variant
(указатель) набор к VT_EMPTY
. Передача пустого массива любого другого числового типа не поддержана.
Аргумент MATLAB | Самый близкий тип COM | Позволенные типы |
---|---|---|
variant |
VT_VARIANT | VT_VARIANT VT_USERDEFINED VT_ARRAY |
variant Указатель | VT_VARIANT | VT_VARIANT | VT_BYREF |
Когда метод COM идентифицирует SAFEARRAY
или SAFEARRAY
(указатель), эквивалентный MATLAB является матрицей.
Аргумент MATLAB | Самый близкий тип COM | Позволенные типы |
---|---|---|
SAFEARRAY | VT_SAFEARRAY | VT_SAFEARRAY |
SAFEARRAY Указатель |
VT_SAFEARRAY | VT_SAFEARRAY | VT_BYREF |
Данные, возвращенные в COM-объект, часто несовместимы с типами MATLAB. Когда это происходит, MATLAB преобразует возвращенное значение в собственный компонент типа данных языка MATLAB. В этом разделе описываются преобразование, выполняемое на различных типах, которые могут быть возвращены в COM-объекты.
Следующая таблица показывает, как MATLAB преобразует данные из COM-объекта в переменные MATLAB.
Тип варианта COM | Описание | Представление MATLAB |
---|---|---|
VT_DISPATCH |
| указатель |
VT_LPWSTR VT_LPSTR VT_BSTR VT_FILETIME VT_ERROR VT_DECIMAL VT_CLSID VT_DATE
| широкий | символьный вектор |
VT_INT VT_UINT VT_I2 VT_UI2 VT_I4 VT_UI4 VT_R4 VT_R8 VT_CY
|
| double |
VT_I8 |
| int64 |
VT_UI8 |
| uint64 |
VT_BOOL
| logical | |
VT_I1 VT_UI1
| signed char unsigned char | 'char' |
VT_VARIANT VT_USERDEFINED VT_ARRAY |
| variant |
VT_VARIANT | VT_BYREF
|
| variant Указатель |
VT_SAFEARRAY | используйте | SAFEARRAY |
VT_SAFEARRAY | VT_BYREF | SAFEARRAY Указатель |
MATLAB не поддерживает следующие типы COM-интерфейса.
Структура
Разреженный массив
Многомерный SAFEARRAY
s (больше, чем две размерности)
Свойства только для записи
SAFEARRAY
тип данных является стандартным способом передать массивы между COM-объектами. Этот раздел объясняет, как MATLAB передает SAFEARRAY
данные к COM-объекту.
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
Для получения информации смотрите, Как я могу передать аргументы серверу ActiveX от MATLAB 7.0 (R14) как одномерные массивы?
Для получения информации смотрите, Как я могу передать аргументы в отношении сервера ActiveX от MATLAB 7.0 (R14)?
Этот раздел объясняет, как MATLAB читает SAFEARRAY
данные из COM-объекта.
MATLAB читает одномерный SAFEARRAY
с n
элементы от COM-объекта как 1
- n
матрица.
MATLAB читает двумерный SAFEARRAY
с n
элементы как 2
- n
матрица.
MATLAB читает 3D SAFEARRAY
с двумя элементами как 2
- 2
- 2
cellArray.
Чтобы определить который типы 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
.