主要内容

数据转换

转换规则

介绍使用。COM组件创建时的数据转换规则MATLAB®编译器SDK™产品。这些组件是支持与自动化兼容的数据类型的双接口COM对象。万博1manbetx

笔记

自动化(以前称为OLE Automation)是一种允许软件包将其独特功能暴露给脚本工具和其他应用程序的技术。自动化使用组件对象模型(COM),但可以独立地从其他OLE功能实现,例如就地激活。

谨慎

请注意,IIS(Internet信息服务)通常会根据它可能提出安全风险,以防止大多数COM自动化。所以,xlsread.和其他自动化服务在IIS服务时可能会失败,导致如下错误未设置对象引用

对象上调用方法时MATLAB编译器SDK组件时,将输入参数转换为MATLAB内部数组格式并传递给已编译的MATLAB函数。当函数退出时,输出参数将从MATLAB内部数组格式转换为COM自动化类型。

COM客户端将编译后的MATLAB函数中的所有输入和输出参数作为类型传递变体.COM.变体类型是几个简单数据类型的联合。一个类型变体变量可以存储任何简单类型的变量,以及这些值的任何数组。

Win32 API提供了许多用于创建和操纵的功能变体s在c / c ++中,和微软®Visual Basic®为此类型提供母语支持。万博1manbetx看看微软Visual Studio®COM定义和API支持的文档万博1manbetx变体年代。变体变量是自描述的,并将其类型代码存储为结构的内部字段。

笔记

关于数据的讨论涉及到这两个方面变体变体数据类型。变体是c++名和变体是Visual Basic中的相应数据类型。

支持的变体类型代码万博1manbetx来查看变体编译器组件支持的类型代万博1manbetx码。

matlab到COM变体转换规则Matlab转换规则的COM变量用于COM之间的转换规则变体s和MATLAB数组。

支持的变体类型代码万博1manbetx

变体类型代码
(C / C ++)
C / C ++类型 变体类型代码(Visual Basic) 视觉基本类型 定义
VT_EMPTY - vbEmpty -

未初始化变体

VT_I1 字符 - -

签名一个字节字符

vt_ui1.

无符号字符

vbByte 字节

无符号1字节字符

VT_I2 vbInteger 整数

签名的双字节整数

vt_ui2. 毫无符号短期 - -

无符号两字节整数

VT_I4 vbLong

签署了4字节整数

vt_ui4. 无符号长 - -

无符号4字节整数

VT_R4 浮动 vbSingle

IEEE®4字节浮点值

VT_R8 vbDouble

IEEE八字节浮点值

vt_cy. CY.+ VBCurrency. 货币

货币值(64位整数,缩放10,000)

vt_bstr. + vbString 细绳

字符串值

VT_ERROR sc+ vbError -

HRESULT(签名的四字节整数表示COM错误代码)

VT_DATE 日期+ vbDate 日期

表示日期和时间的八字节浮点值

vt_int. int - -

带符号整数;等同于类型int

VT_UINT 无符号整型 - -

无符号整数;等同于类型无符号整型

vt_decimal. 小数+ vbDecimal -

96位(12字节)无符号整数,按10的可变次幂缩放

VT_BOOL VARIANT_BOOL+ vbboolean. 布尔

双字节布尔值(0xFFFF = True;0 x0000 = False)

vt_dispatch. IDispatch * vbObject 对象

IDispatch *指向对象的指针

VT_VARIANT 变体+ vbvariant. 变体

变体(只能在组合时指定vt_byref.VT_ARRAY的)

<任何东西> | VT_ARRAY

位结合VT_ARRAY将任何基本类型声明为数组

<任何东西> | VT_BYREF

位结合vt_byref.将任何基本类型声明为值的引用

+表示Windows.®具体类型。不是标准C / C ++的一部分。

MATLAB到COM变量转换规则

MATLAB数据类型 标量数据的变体类型 阵列数据的变体类型 评论
细胞

一个1×1个单元格阵列转换为单个变体类型符合单元格内容的MATLAB数据类型的转换规则。

多维单元阵列转换为a变体类型VT_VARIANT | VT_ARRAY使用每个阵列构件的类型,符合相应小区的MATLAB数据类型的转换规则。

结构

vt_dispatch.

vt_dispatch.

麦克拉布塑造数组被转换为MWStruct目的。(看类MWStruct.)该对象作为vt_dispatch.类型。

字符

一个1×1字符矩阵转换为变体类型vt_bstr.字符串长度= 1。

一个1-by-L字符在MATLAB中假设矩阵表示长度为L的字符串。这种情况转换为变体类型vt_bstr.字符串长度= L。字符多行矩阵,或高维矩阵转换为变体类型VT_BSTR | VT_ARRAY.转换后的数组中的每个字符串长度为1,对应于原始矩阵中的每个字符。

不支持字符串数组万博1manbetx字符矩阵。要传递字符串数组,请使用1 × l的单元格数组字符矩阵。

vt_dispatch.

vt_dispatch.

MATLAB稀疏阵列转换为mwsparse.目的。(看类MWSparse.)该对象作为vt_dispatch.类型。

一个实的1 × 1双矩阵转换成A变体类型VT_R8.一个1 × 1的复式矩阵转换成A变体类型vt_dispatch.

一个真实的多维双矩阵转换成变体类型vt_r8 | vt_array.
一个复杂的多维双矩阵转换为变体类型vt_dispatch.

复杂数组通过编译MATLAB函数传递MWComplex班级。看类MWComplex

一个真正的1-by-1单个矩阵转换为a变体类型VT_R4.一个复杂的1-by-1单个矩阵转换为a变体类型vt_dispatch.

一个真实的多维单矩阵转换成变体类型vt_r4 | vt_array.
一个复杂的多维单矩阵转换为变体类型vt_dispatch.

复杂数组通过编译MATLAB函数传递MWComplex班级。

int8

一个真正的1×1int8矩阵转换为变体类型VT_I1.一个复杂的1-by-1int8矩阵转换为变体类型vt_dispatch.

一个真正的多维int8矩阵转换为变体V型T_I1 | VT_ARRAY
一个复杂的多维int8矩阵转换为变体类型vt_dispatch.

复杂数组通过编译MATLAB函数传递MWComplex班级。

uint8

一个真正的1×1uint8矩阵转换为变体类型vt_ui1..一个复杂的1-by-1uint8矩阵转换为变体类型vt_dispatch.

一个真正的多维uint8矩阵转换为变体类型VT_UI1 | VT_ARRAY复杂多维。uint8矩阵转换为变体类型vt_dispatch.

复杂数组通过编译MATLAB函数传递MWComplex班级。

int16

一个真正的1×1int16矩阵转换为变体类型VT_I2.一个复杂的1-by-1int16矩阵转换为变体类型vt_dispatch.

一个真正的多维int16矩阵转换为变体类型vt_i2 | vt_array..一个复杂的多维int16矩阵转换为变体类型vt_dispatch.

复杂数组通过编译MATLAB函数传递MWComplex班级。

uint16

一个真正的1×1uint16矩阵转换为变体类型vt_ui2..一个复杂的1-by-1uint16矩阵转换为变体类型vt_dispatch.

一个真正的多维uint16矩阵转换为变体类型VT_UI2 | VT_ARRAY.一个复杂的多维uint16矩阵转换为变体类型vt_dispatch.

复杂数组通过编译MATLAB函数传递MWComplex班级。

int32

一个1×1int32矩阵转换为变体类型VT_I4.一个复杂的1-by-1int32矩阵转换为变体类型vt_dispatch.

一个多维int32矩阵转换为变体类型VT_I4 | VT_ARRAY.一个复杂的多维int32矩阵转换为变体类型vt_dispatch.

复杂数组通过编译MATLAB函数传递MWComplex班级。

uint32

一个1×1uint32矩阵转换为变体类型vt_ui4..一个复杂的1-by-1uint32矩阵转换为变体类型vt_dispatch.

一个多维uint32矩阵转换为变体类型vt_ui4 | vt_array..一个复杂的多维uint32矩阵转换为变体类型vt_dispatch.

复杂数组通过编译MATLAB函数传递MWComplex班级。

函数处理

VT_EMPTY

VT_EMPTY

不支持万博1manbetx

Java®班级

VT_EMPTY

VT_EMPTY

不支持万博1manbetx

用户类

VT_EMPTY

VT_EMPTY

不支持万博1manbetx

逻辑

VT_Bool

vt_bool | vt_array.

COM变体MATLAB转换规则

变体类型 MATLAB数据类型(标量或数组数据) 评论
VT_EMPTY

N/A

创建空数组。

VT_I1 int8

vt_ui1. uint8

VT_I2 int16

vt_ui2. uint16

VT_I4 int32

vt_ui4. uint32

VT_R4

VT_R8

vt_cy.

vt_bstr. 字符

一种变体类型vt_bstr.转换成1乘l的MATLAB字符数组,其中l =要转换的字符串的长度。一种变体类型VT_BSTR | VT_ARRAY转换为1 × l的MATLAB单元阵列字符数组。

VT_ERROR int32

VT_DATE

变体从1899年12月31日午夜开始,日期被存储为双引号。MATLAB日期被存储为从0/0/00 00:00:00开始的双精度浮点数。因此,一个变体日期的0.0地图到MATLAB数字日期的693960.0。变体数据转换为MATLAB双精度类型并加693960.0。

变体日期可选地转换为字符串。看数据转换的旗帜有关类型强制转换的更多信息。

vt_int. int32

VT_UINT uint32

vt_decimal.

VT_BOOL 逻辑

vt_dispatch. 不同

IDispatch *指针在它们所指向的上下文中处理。对象必须是具有已知数据提取和转换万博1manbetx规则的受支持类型,否则将公开泛型价值指向单一的财产变体类型。从对象中提取的数据基于特定规则转换变体获得。

目前,支持Excel万博1manbetx®范围对象以及类型MWStructMWComplexmwsparse.,姆瓦尔格.看参考实用工具类,以获取有关与COM组件一起使用的类型的信息。

任何东西| VT_BYREF. 不同

根据他们指向的规则处理到任何基本类型的指针。生成的MATLAB阵列包含值的深度副本。

任何东西| VT_ARRAY 不同

多维变体数组转换为MATLAB的多维数组,每个元素按照转换规则进行基本类型转换。多维变体类型的数组VT_VARIANT | VT_ARRAY转换为多维单元格阵列,每个单元格根据该特定类型的规则转换。

数组格式标志

组件有控制数组数据在两个方向上如何格式化的标志。通常,您应该开发客户端代码,使MATLAB函数的预期输入和输出与已编译的COM对象上的相应方法相匹配,符合中列出的规则matlab到COM变体转换规则Matlab转换规则的COM变量.在某些情况下,这是不可能的,例如,当现有的MATLAB代码与第三方产品如Excel一起使用时。

下表显示了数组格式化标志。

数组格式标志

国旗 描述

InputArrayFormat

定义用于输入数组的数组格式化规则。
输入数组是一个变体由客户端创建的数组,作为输入参数发送到已编译的COM对象上的方法调用。

此标志的有效值是mwArrayFormatAsIsmwArrayFormatMatrix,mwarrayformatcell.

mwArrayFormatAsIs不变地传递数组。

mwArrayFormatMatrix(默认)将所有数组格式化为矩阵。当输入时变体的类型是VT_ARRAY|类型,在那里类型是任何数字类型,此标志无效。当输入时变体的类型是VT_VARIANT | VT_ARRAY变体检查阵列中的s。如果它们是单值和均匀的类型,则产生适当类型的MATLAB矩阵而不是单元阵列。

mwarrayformatcell.将所有阵列解释为MATLAB单元阵列。

InputArrayIndFlag

属性使用的输入数组间接级别InputArrayFormat国旗(仅适用于嵌套数组,即,变体阵列变体s,本身是阵列)。此标志的默认值为零,适用于此InputArrayFormat标记到最外面的数组。当该标志大于0时,例如等于N,格式化规则尝试将自己应用到第N层嵌套。

outcounarArayFormat.

定义用于输出数组的数组格式化规则。输出数组是一个MATLAB数组,由编译后的COM对象创建,作为一个输出参数从方法调用发送到客户端。这面旗帜的值,mwArrayFormatAsIsmwArrayFormatMatrix,mwarrayformatcell.,引起相应的相同行为InputArrayFormat标志值。

outputarrayindflag.

(仅适用于嵌套单元格数组。)的输出数组间接级别outcounarArayFormat.国旗。这面旗帜就像InputArrayIndFlag

autorezeOutput.

(仅适用于Excel范围。)当从方法调用的目标输出是Excel工作表中的一系列单元格,并且在呼叫时未知输出阵列大小和形状,请将此标志设置为真正的调整每个Excel范围的大小以适应输出数组。

TranspingOutput.

将此标志设置为真正的转换输出参数。在从Excel调用Matlab函数作为行向量中返回输出的Excel时有用,并且您希望列中的数据。

数据转换的旗帜

MATLAB编译器SDK组件包含控制转换的标志变体类型转换为MATLAB类型。这些旗帜如下:

Coercenumerictype.

此标志告诉数据转换器将所有数字转换变体数据到一个特定的MATLAB类型。变体受此标志影响的类型代码是VT_I1vt_ui1.VT_I2vt_ui2.VT_I4vt_ui4.VT_R4VT_R8vt_cy.vt_decimal.vt_int.VT_UINTVT_ERRORVT_BOOL,VT_DATE.此标志的有效值是mwTypeDefaultmwTypeCharmwTypeDoublemwTypeSinglemwTypeLogicalmwTypeInt8mwTypeUint8mwtypeint16mwTypeUint16mwtypeint32.,mwTypeUint32

这个标志的默认值是,mwTypeDefault,根据列出的规则转换数字数据数据转换

InputDateFormat

这个标志告诉数据转换器如何转换变体日期为matlab日期。此标志的有效值是mwdateformatnumeric.(默认)和mwdateformatstring..默认的转换变体根据规则列出的日期支持的变体类型代码万博1manbetx.的mwdateformatstring.国旗转换变体日期到它的字符串表示形式。此标志仅影响变体类型代码VT_DATE

OutputAsDate作为布尔

这个标志指示数据转换器将输出参数作为日期处理。默认情况下,数值日期是编译后的MATLAB函数的输出参数需要由COM日期偏差(693960)递减,并强制为COM日期。将此标志设置为真正的转换类型的所有输出值

DateBias一样长

此标志设置执行COM到MATLAB数值日期转换的日期偏差。此属性的默认值是693960,它表示COM之间的差值日期类型和MATLAB数值数据。该标志允许已经执行数字日期增量693960的现有MATLAB代码不加更改地使用组件。若要使用此类代码处理日期,请将此属性设置为0.