处理COM数据MATLAB
将数据传递给COM对象
当你在MATLAB中使用COM对象时®命令,您在调用中传递的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 |
单 |
VT_R4 |
VT_R4 |
双 |
VT_R8 |
VT_R8 VT_CY |
逻辑 |
VT_BOOL |
VT_BOOL |
字符 | VT_I1 |
VT_I1 VT_UI1 |
变量数据
变体
是除结构或稀疏数组外的任何数据类型。(有关更多信息,请参见MATLAB基础类.)
当用作输入参数时,MATLAB处理变体
而且变体
(指针)同样的方式。
如果传递一个空数组([]
)类型双
, MATLAB创建一个变体
(指针)设置为VT_EMPTY
.不支持传递任何其他数值类型的空数组。万博1manbetx
MATLAB的论点 | 最接近的COM类型 | 允许的类型 |
---|---|---|
变体 |
VT_VARIANT |
VT_VARIANT VT_USERDEFINED VT_ARRAY |
变体 (指针) |
VT_VARIANT |
VT_VARIANT |VT_BYREF |
SAFEARRAY数据
当COM方法标识一个SAFEARRAY
或SAFEARRAY
(指针),MATLAB等效为一个矩阵。
MATLAB的论点 | 最接近的COM类型 | 允许的类型 |
---|---|---|
SAFEARRAY |
VT_SAFEARRAY |
VT_SAFEARRAY |
SAFEARRAY (指针) |
VT_SAFEARRAY |
VT_SAFEARRAY |VT_BYREF |
处理COM对象中的数据
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 |
|
双 |
VT_I8 |
|
int64 |
VT_UI8 |
|
uint64 |
VT_BOOL |
逻辑 |
|
VT_I1 VT_UI1 |
签署了字符 无符号字符 |
字符 |
VT_VARIANT VT_USERDEFINED VT_ARRAY |
|
变体 |
VT_VARIANT |VT_BYREF |
|
变体 (指针) |
VT_SAFEARRAY |
使用 |
SAFEARRAY |
VT_SAFEARRAY |VT_BYREF |
SAFEARRAY (指针) |
不支万博1manbetx持的类型
MATLAB不支持以下COM接口万博1manbetx类型。
结构
稀疏阵列
多维
SAFEARRAY
S(大于二维)只写属性
通过MATLABSAFEARRAY到COM对象
的SAFEARRAY
数据类型是在COM对象之间传递数组的标准方法。本节解释MATLAB是如何通过的SAFEARRAY
数据到COM对象。
默认行为MATLAB
MATLAB表示一个米
——- - - - - -n
矩阵的二维形式SAFEARRAY
,其中第一个维度有米
元素和二次元有n
元素。MATLAB通过SAFEARRAY
的价值。
例子
下面的示例使用COM对象,它期望使用SAFEARRAY
输入参数。
当MATLAB通过一个1
——- - - - - -3.
数组:
B = [2 3 4] B = 2 3 4
该对象为:
不。灯:1,灯号。1、Dim: 2、No。元素:2.0 3.0 4.0
当MATLAB通过一个3.
——- - - - - -1
数组:
C = [1;2;3] C = 1 2
该对象为:
不。灯:1,灯号。元素:3 Dim: 2, No。元素: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
该对象为:
不。灯:1,灯号。Dim: 2, No。元素:2.0 3.0 4.0 5.0 5.0 6.0 7.0 8.0
通过一维SAFEARRAY
通过引用传递SAFEARRAY
从COM对象中读取SAFEARRAYMATLAB应用程序
本节解释MATLAB如何读取SAFEARRAY
COM对象的数据。
MATLAB读取的是一维SAFEARRAY
与n
元素从COM对象中获取1
——- - - - - -n
矩阵。
MATLAB读取二维SAFEARRAY
与n
元素作为2
——- - - - - -n
矩阵。
MATLAB读取三维SAFEARRAY
用两个元素作为a2
——- - - - - -2
——- - - - - -2
单元阵列。
显示MATLABCOM对象的语法
要确定在向COM对象传递参数时使用哪个MATLAB类型,请使用调用
或methodsview
功能。这些函数列出了在对象中找到的所有方法,以及每个参数所需的类型的说明。
考虑一个名为MyApp
,它只有一个方法TestMeth1
使用以下语法:
HRESULT TestMeth1 ([out, retval] double* dret);
这个方法没有输入参数,它返回一个类型为的变量双
.以下伪代码显示调用该方法的MATLAB语法。
h = actxserver('MyApp');调用(h)
MATLAB显示:
ans = TestMeth1 = double TestMeth1(句柄)
的签名TestMeth1
是:
双TestMeth1(处理)
除了方法本身所需的任何输入参数外,MATLAB还要求您使用对象句柄作为每个方法的输入参数。
使用以下方法之一伪代码命令来创建变量var
,这是类型双
.
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);
使用调用
函数,MATLAB显示方法列表:
ans = TestMeth1 = double TestMeth1(句柄)TestMeth2 = double TestMeth2(句柄,双)TestMeth3 = [double, string, double, string, int32, single]…TestMeth3(句柄,double,字符串,int16, single)
TestMeth2
需要输入参数d
类型的双
,并返回一个变量dret
类型的双
.一些伪代码呼叫的例子TestMeth2
是:
var = h.TestMeth2(5);
或者:
var = TestMeth2(h, 5);
TestMeth3
需要多个输入参数(如等号右侧括号内所示),并返回多个输出参数(如等号左侧括号内所示)。
TestMeth3(handle, double, string, int16, single) %的输入参数
第一个输入参数是必需的处理
,后面跟着四个输入参数。
TestMeth3(句柄,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
是双
,多
是字符串
,dinout
是双
既是输入参数也是输出参数,sinout
是字符串
(输入输出参数),ln
是int32
,b1
是单
(输入输出参数),处理
对象的句柄,和上海
是int16
.