Когда вы используете COM-объект в MATLAB® команда, MATLAB вводит вас, передача в вызове преобразована в собственный компонент типов COM-объекта. MATLAB выполняет это преобразование на каждом аргументе, который передается. В этом разделе описываются преобразование.
MATLAB преобразует аргументы MATLAB в типы, которые лучше всего представляют данные COM-объекту. Следующая таблица показывает все базовые типы MATLAB для передаваемых аргументов и типов COM, заданных для входных параметров. Каждая строка показывает тип MATLAB, сопровождаемый возможными соответствиями аргумента COM. Для описания типов варианта COM смотрите, что таблица в Обрабатывает Данные от COM-объектов.
| Аргумент MATLAB | Самый близкий тип COM | Позволенные типы |
|---|---|---|
| указатель | VT_DISPATCHVT_UNKNOWN | VT_DISPATCHVT_UNKNOWN |
| символьный вектор |
VT_BSTR | VT_LPWSTRVT_LPSTRVT_BSTRVT_FILETIMEVT_ERRORVT_DECIMALVT_CLSIDVT_DATE |
int16 |
VT_I2 | VT_I2 |
uint16 | VT_UI2 | VT_UI2 |
int32 | VT_I4 | VT_I4VT_INT |
uint32 | VT_UI4 | VT_UI4VT_UINT |
int64 | VT_I8 | VT_I8 |
uint64 | VT_UI8 | VT_UI8 |
single | VT_R4 | VT_R4 |
double |
VT_R8 | VT_R8VT_CY
|
logical | VT_BOOL
| VT_BOOL |
| 'char' |
VT_I1 | VT_I1VT_UI1 |
variant любой тип данных кроме структуры или разреженного массива. (Для получения дополнительной информации смотрите Основной принцип Классы MATLAB.)
Когда используется в качестве входного параметра, MATLAB обрабатывает variant и variant(указатель) тот же путь.
Если вы передаете пустой массив ([]) из типа double, MATLAB создает variant(указатель) набор к VT_EMPTY. Передача пустого массива любого другого числового типа не поддерживается.
| Аргумент MATLAB | Самый близкий тип COM | Позволенные типы |
|---|---|---|
variant |
VT_VARIANT | VT_VARIANTVT_USERDEFINEDVT_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_LPWSTRVT_LPSTRVT_BSTRVT_FILETIMEVT_ERRORVT_DECIMALVT_CLSIDVT_DATE
| широкий | символьный вектор |
VT_INTVT_UINTVT_I2VT_UI2VT_I4VT_UI4VT_R4VT_R8VT_CY
|
| double |
VT_I8 |
| int64 |
VT_UI8 |
| uint64 |
VT_BOOL
| logical | |
VT_I1VT_UI1
| signed charunsigned char | 'char' |
VT_VARIANTVT_USERDEFINEDVT_ARRAY |
| variant |
VT_VARIANT | VT_BYREF
|
| variantУказатель |
VT_SAFEARRAY | используйте | SAFEARRAY |
VT_SAFEARRAY | VT_BYREF | SAFEARRAYУказатель |
MATLAB не поддерживает следующие типы COM-интерфейса.
Структура
Разреженный массив
Многомерный SAFEARRAYs (больше, чем две размерности)
Свойства только для записи
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.