处理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
。传递一个空数组的任何其他数值类型不受支持。金宝app
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 (指针) |
不支金宝app持的类型
MATLAB不支持以下COM接口金宝app类型。
结构
稀疏阵列
多维
SAFEARRAY
(大于两个维度)只写属性
通过MATLABSAFEARRAY COM对象
的SAFEARRAY
数据类型是一个COM对象之间传递数组的标准方法。本节解释了MATLABSAFEARRAY
数据一个COM对象。
违约行为MATLAB
MATLAB是一个米
——- - - - - -n
作为一个二维矩阵SAFEARRAY
,第一个维度米
元素和第二个维度n
元素。MATLAB传递SAFEARRAY
的价值。
例子
下面的示例使用一个预计的COM对象SAFEARRAY
输入参数。
在MATLAB传递1
——- - - - - -3
数组:
B = [2 3 4] B = 2 3 4
对象:
不。尺寸:2暗淡:1,不。的元素:1暗:2,不。的元素:3要素:2.0 3.0 4.0
在MATLAB传递3
——- - - - - -1
数组:
C = C [1, 2, 3] = 1 2 3
对象:
不。尺寸:2暗淡:1,不。的元素:3暗淡:2,不。元素的元素:1:1.0 2.0 3.0
在MATLAB传递2
——- - - - - -4
数组:
D = [2 3 4 5; 5 6 7 8] 5 D = 2 3 4 5 6 7 8
对象:
不。尺寸:2暗淡:1,不。的元素:2暗淡:2,不。的元素:4元素:2.0 3.0 4.0 5.0 5.0 6.0 7.0 8.0
通过一维SAFEARRAY
通过引用传递SAFEARRAY
读SAFEARRAY从COM对象MATLAB应用程序
本节解释如何MATLAB读取SAFEARRAY
数据从一个COM对象。
MATLAB读取一维SAFEARRAY
与n
作为一个元素从一个COM对象1
——- - - - - -n
矩阵。
MATLAB是一个二维SAFEARRAY
与n
作为一个元素2
——- - - - - -n
矩阵。
MATLAB读取三维SAFEARRAY
作为一个有两个元素2
——- - - - - -2
——- - - - - -2
单元阵列。
显示MATLABCOM对象的语法
确定使用哪个MATLAB类型COM对象传递参数时,使用调用
或methodsview
功能。这些函数列表的所有方法中发现的一个对象,以及每个参数所需规范的类型。
考虑一个服务器被称为MyApp
有一个方法TestMeth1
使用下面的语法:
HRESULT TestMeth1 ([, retval]双* dret);
这个方法没有输入参数,并返回一个变量的类型双
。以下伪代码显示调用的方法的MATLAB语法。
h = actxserver (“MyApp”);调用(h)
MATLAB显示:
ans = TestMeth1 =双TestMeth1(处理)
的签名TestMeth1
是:
双TestMeth1(处理)
MATLAB需要你使用一个对象句柄作为输入参数为每个方法,除了任何方法本身所需的输入参数。
使用下列之一伪代码命令创建变量var
类型的双
。
var = h.TestMeth1;
或者:
var = TestMeth1 (h);
尽管以下语法是正确的,它的使用是沮丧:
var =调用(h,“TestMeth1”);
现在考虑服务器调用MyApp1
用以下方法:
HRESULT TestMeth1 ([, retval]双* dret);HRESULT TestMeth2([在]双* d, [, retval]双* dret);HRESULT TestMeth3([出]*多,型双* dinout [,], [,] * sinout型,[在]短sh,长* ln[出],[,]浮* b1, [, retval]双* dret);
使用调用
MATLAB函数,显示列表的方法:
ans = TestMeth1 =双TestMeth1(处理)TestMeth2 =双TestMeth2(手柄,双)TestMeth3 =(双、字符串、双、字符串int32,单一]…TestMeth3(处理、双、字符串、int16单)
TestMeth2
需要一个输入参数d
类型的双
,并返回一个变量dret
类型的双
。一些伪代码调用的例子TestMeth2
是:
var = h.TestMeth2 (5);
或者:
var = TestMeth2 (h, 5);
TestMeth3
需要多个输入参数,显示在括号内的等号右边,并返回多个输出参数,括号内显示在左边的等号。
(双、字符串、双、字符串int32,单一]%输出参数TestMeth3(处理、双、字符串、int16单)%输入参数
第一个输入参数是必需的处理
,紧随其后的是四个输入参数。
TestMeth3(处理in1, in2、in3 in4)
第一个参数是输出返回值retval
,紧随其后的是五个输出参数。
[retval,着干活,out2、out3 out4, out5]
这就是映射到一个MATLAB命令的参数:
[dret,多,dinout sinout, ln, b1) = TestMeth3(处理,…dinout sinout, sh, b1)
在哪里dret
是双
,多
是字符串
,dinout
是双
是一个输入和一个输出参数,sinout
是字符串
(输入和输出参数),ln
是int32
,b1
是单
(输入和输出参数),处理
是对象的句柄,上海
是int16
。