主要内容

处理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

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

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

有符号机器int
无符号机器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(大于二维)

  • 只写属性

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

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

通过引用传递SAFEARRAY

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

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

本节解释MATLAB如何读取SAFEARRAY来自COM对象的数据。

MATLAB是一维的SAFEARRAYn元素作为1——- - - - - -n矩阵。

MATLAB读取二维SAFEARRAYn元素作为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字符串dinoutAnd既是输入参数也是输出参数,sinout字符串(输入输出参数),lnint32b1(输入输出参数),处理是对象的句柄,和上海int16