主要内容

处理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.不支持传递任何其他数值类型的空数组。万博1manbetx

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

Signed machine 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(指针)

不支万博1manbetx持的类型

MATLAB不支持以下COM接口万博1manbetx类型。

  • 结构

  • 稀疏阵列

  • 多维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

该对象为:

不。灯:1,灯号。1、Dim: 2、No。元素:2.0 3.0 4.0

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

C = [1;2;3] C = 1 2

该对象为:

不。灯:1,灯号。元素:3 Dim: 2, No。元素: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

该对象为:

不。灯:1,灯号。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显示:

ans = TestMeth1 = double TestMeth1(句柄)

的签名TestMeth1是:

双TestMeth1(处理)

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

使用以下方法之一伪代码命令来创建变量var,这是类型

var = h.TestMeth1;

或者:

var = TestMeth1(h);

尽管以下语法是正确的,但不建议使用:

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

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

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

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

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

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

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