主要内容

处理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方法标识SAFEARRAYSAFEARRAY(指针),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

IDispatch *

处理
VT_LPWSTR
VT_LPSTR
VT_BSTR
VT_FILETIME
VT_ERROR
VT_DECIMAL
VT_CLSID
VT_DATE

终止的字符串
终止的字符串
OLE自动化字符串
FILETIME
范围
16字节定点
类ID
日期

特征向量
VT_INT
VT_UINT
VT_I2
VT_UI2
VT_I4
VT_UI4
VT_R4
VT_R8
VT_CY

签约机int
机器无符号整数
2字节符号整数
无符号短
4字节符号整数
无符号长
4字节真正的
8字节真正的
货币

VT_I8

签署int64

int64
VT_UI8

无符号int64

uint64
VT_BOOL 逻辑
VT_I1
VT_UI1
签署了字符
无符号字符
字符
VT_VARIANT
VT_USERDEFINED
VT_ARRAY

变体*
用户定义的类型
SAFEARRAY *

变体
VT_VARIANT|VT_BYREF

变体*
void *为当地使用

变体(指针)
VT_SAFEARRAY

使用VT_ARRAY变体

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

信息,请参阅我如何传递参数到一个ActiveX服务器从MATLAB 7.0 (R14)一维数组?

通过引用传递SAFEARRAY

信息,请参阅我怎样才能通过引用传递参数到一个ActiveX服务器从MATLAB 7.0 (R14) ?

读SAFEARRAY从COM对象MATLAB应用程序

本节解释如何MATLAB读取SAFEARRAY数据从一个COM对象。

MATLAB读取一维SAFEARRAYn作为一个元素从一个COM对象1——- - - - - -n矩阵。

MATLAB是一个二维SAFEARRAYn作为一个元素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字符串(输入和输出参数),lnint32,b1(输入和输出参数),处理是对象的句柄,上海int16