主要内容

处理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类型。

  • 结构

  • 稀疏阵列

  • 多维SAFEARRAYS(大于二维)

  • 只写属性

通过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

对象:

不。尺寸:2 Dim: 1, No. 1元素:1、Dim: 2、No。元素:2.0 3.0 4.0

当MATLAB通过3.——- - - - - -1数组:

C = [1;2;3

对象:

不。尺寸:2 Dim: 1, No. 1元素:3 Dim: 2, No。元素:1.0 2.0 3.0

当MATLAB通过2——- - - - - -4数组:

D = [2 3 4 5;5 6 7 8

对象:

不。尺寸:2 Dim: 1, No. 1元素:2 Dim: 2, No。元素:2.0 3.0 4.0 5.0 5.0 6.0 7.0 8.0

通过一维SAFEARRAY

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

通过引用传递SAFEARRAY

信息,请参阅如何通过引用从MATLAB 7.0 (R14) ActiveX服务器传递参数?

从COM对象中读取SAFEARRAYMATLAB应用程序

本节解释MATLAB如何读取SAFEARRAYCOM对象的数据。

MATLAB读取一维SAFEARRAYn将COM对象中的1——- - - - - -n矩阵。

MATLAB读取一个二维SAFEARRAYn作为一个元素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显示:

TestMeth1 = double TestMeth1(句柄)

的签名TestMeth1是:

双TestMeth1(处理)

MATLAB要求您使用对象句柄作为每个方法的输入参数,以及方法本身所需的任何输入参数。

使用下列任一种伪代码创建变量的命令var,是典型的

var = h.TestMeth1;

或者:

var = TestMeth1 (h);

尽管下面的语法是正确的,但还是不鼓励使用:

var =调用(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显示方法列表:

TestMeth1 = double TestMeth1 (handle) TestMeth2 = double TestMeth2 (handle, double) TestMeth3 = [double, string, double, string, int32, single]…TestMeth3(句柄,双引号,字符串,int16,单引号)

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,后跟5个输出参数。

[retval, out1, out2, out3, out4, out5]

这是参数映射到MATLAB命令的方式:

[dret, sout, dinout, sinout, ln, b1] = TestMeth3(handle,…Dinout sinout sh b1)

在哪里dret字符串dinout并且既是输入参数也是输出参数,sinout字符串(输入输出参数),lnint32b1(输入输出参数),处理对象的句柄是and吗上海int16