Когда вы используете COM-объект в MATLAB® команды, типы MATLAB, которые вы передаете в вызове, преобразуются в типы, входящие в COM-объект. MATLAB выполняет это преобразование для каждого переданного аргумента. В этом разделе описывается преобразование.
MATLAB преобразует аргументы MATLAB в типы, которые лучше всего представляют данные в COM-объект. В следующей таблице показаны все базовые типы MATLAB для переданных аргументов и COM-типы, определенные для входных параметров. Каждая строка показывает тип MATLAB, за которым следует возможный аргумент. Описание типов вариантов COM см. в таблице в Handle Data from 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 (больше двух измерений)
Свойства только для записи
The SAFEARRAY
тип данных является стандартным способом передачи массивов между COM-объектами. В этом разделе объясняется, как MATLAB проходит SAFEARRAY
данные для COM-объекта.
MATLAB представляет m
-by- n
матрица как двумерное SAFEARRAY
, где первая размерность имеет m
элементы и второе измерение имеет n
элементы. MATLAB передает SAFEARRAY
по значению.
В следующих примерах используется COM-объект, который ожидает SAFEARRAY
входной параметр.
Когда MATLAB передает 1
-by- 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
-by- 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
-by- 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
-by- n
матрица.
MATLAB читает двумерное SAFEARRAY
с n
элементы как 2
-by- n
матрица.
MATLAB читает трехмерное SAFEARRAY
с двумя элементами в виде 2
-by- 2
-by- 2
массив ячеек.
Чтобы определить, какие типы 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
function, 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
является string
, dinout
является double
и является и входом, и выходным аргументом, sinout
является string
(входной и выходной аргументы), ln
является int32
, b1
является single
(входной и выходной аргументы), handle
является указателем на объект и sh
является int16
.