处理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
S(大于二维)只写属性
通过MATLABCOM对象的安全数组
的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
该对象为:
不。尺寸:2 Dim: 1, No。元素:1 Dim: 2, No。元素:3元素:2.0 3.0 4.0
当MATLAB传递3.
——- - - - - -1
数组:
C = [1;2;3] C = 1 2
该对象为:
不。尺寸:2 Dim: 1, No。元素:3 Dim: 2, No。元素:1元素: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
该对象为:
不。尺寸:2 Dim: 1, No。元素:2 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
元素作为1
——- - - - - -n
矩阵。
MATLAB读取二维SAFEARRAY
与n
元素作为2
——- - - - - -n
矩阵。
MATLAB读取三维SAFEARRAY
有两个元素a2
——- - - - - -2
——- - - - - -2
单元阵列。
显示MATLABCOM对象的语法
要确定在向COM对象传递参数时使用哪种MATLAB类型,请使用调用
或methodsview
功能。这些函数列出了在对象中找到的所有方法,以及每个参数所需的类型说明。
考虑一个名为MyApp
,它只有一个方法TestMeth1
使用以下语法:
HRESULT TestMeth1 ([out, reval] double* dret);
这个方法没有输入参数,它返回一个类型为的变量双
.以下伪代码显示调用该方法的MATLAB语法。
h = actxserver('MyApp');调用(h)
MATLAB显示:
ans = TestMeth1 = double TestMeth1 (handle)
签字TestMeth1
是:
双TestMeth1(处理)
MATLAB要求您使用对象句柄作为每个方法的输入参数,以及方法本身所需的任何输入参数。
请使用以下方法之一伪代码命令来创建变量var
,这是类型双
.
var = h.TestMeth1;
或者:
var = TestMeth1(h);
虽然下面的语法是正确的,但不建议使用:
var = invoke(h,'TestMeth1');
现在考虑调用的服务器MyApp1
通过以下方法:
HRESULT TestMeth1 ([out, reval] double* dret);HRESULT TestMeth2 ([in] double* d, [out, reval] 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 (handle) TestMeth2 = double TestMeth2 (handle, double) TestMeth3 = [double, string, double, string, int32, single]…TestMeth3(句柄,double,字符串,int16, single)
TestMeth2
需要输入参数d
类型的双
,返回一个变量dret
类型的双
.一些伪代码呼叫的例子TestMeth2
是:
var = h.TestMeth2(5);
或者:
var = TestMeth2(h, 5);
TestMeth3
需要多个输入参数,如等号右侧的括号内所示,并返回多个输出参数,如等号左侧的括号内所示。
[double, string, double, string, int32, single] %输出参数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
是双
And既是输入参数也是输出参数,sinout
是字符串
(输入输出参数),ln
是int32
,b1
是单
(输入输出参数),处理
是对象的句柄,和上海
是int16
.