数据转换规则
本主题介绍 MATLAB® Compiler™ 组件的数据转换规则。这些组件是双接口 Microsoft® COM 对象,支持与自动化兼容的数据类型。
注意
自动化(以前称为 OLE 自动化)是一种允许软件包向脚本工具和其他应用程序公开其独特功能的技术。自动化使用组件对象模型 (COM),但可以独立于其他 OLE 功能(例如就地激活)实现。
当在 MATLAB Compiler 组件上调用方法时,输入参数将转换为 MATLAB 内部数组格式并传递给编译后的 MATLAB 函数。当函数退出时,输出参数从 MATLAB 内部数组格式转换为 COM 自动化类型。
COM 客户端将编译后的 MATLAB 函数中的所有输入和输出参量作为 VARIANT
类型传递。COM VARIANT
类型是几种简单数据类型的联合。VARIANT
类型变量可以存储任何简单类型的变量,以及任何这些值的数组。
Win32 应用程序接口 (API) 提供了许多用于在 C/C++ 中创建和操作 VARIANT
函数,而 Visual Basic® 为这种类型提供了本机语言支持。
注意
此处对数据的讨论涉及 VARIANT
和 Variant
数据类型。VARIANT 是 C++ 名称,VARIANT
是 Visual Basic 中 Variant
的数据类型。
请参阅 Visual Studio® 文档以了解 COM VARIANT
的定义和 API 支持 VARIANT
变量是自描述的,并将其类型代码存储为结构的内部字段。
下表列出了 MATLAB Compiler 组件支持的 VARIANT
类型代码。
支持的 VARIANT 类型代码
VARIANT 类型代码(C/C++) | C/C++ 类型 | Variant 类型代码 (Visual Basic) | Visual Basic 类型 | 定义 |
---|---|---|---|---|
VT_EMPTY | — | vbEmpty | — | 未初始化的 |
VT_I1 | char | — | — | 有符号单字节字符 |
VT_UI1 | 无符号 | vbByte | Byte | 无符号单字节字符 |
VT_I2 | short | vbInteger | Integer | 有符号双字节整数 |
VT_UI2 | unsigned short | - | - | 无符号双字节整数 |
VT_I4 | long | vbLong | Long | 有符号四字节整数 |
VT_UI4 | unsigned long | - | - | 无符号四字节整数 |
VT_R4 | float | vbSingle | Single | IEEE® 四字节浮点值 |
VT_R8 | double | vbDouble | Double | IEEE 八字节浮点值 |
VT_CY | CY + | vbCurrency | Currency | 货币值(64 位整数,按 10,000 缩放) |
VT_BSTR | BSTR + | vbString | String | 字符串值 |
VT_ERROR | SCODE + | vbError | - |
|
VT_DATE | DATE + | vbDate | Date | 表示日期和时间的八字节浮点值 |
VT_INT | int | - | - | 有符号整数;等同于类型 |
VT_UINT | unsigned int | - | - | 无符号整数;等效于 |
VT_DECIMAL | DECIMAL + | vbDecimal | - | 96 位(12 字节)无符号整数,按 10 的可变幂缩放 |
VT_BOOL | VARIANT_BOOL + | vbBoolean | Boolean | 两字节布尔值(0xFFFF = True;0x0000 = False) |
VT_DISPATCH | IDispatch* | vbObject | Object | 指向对象的 |
VT_VARIANT | VARIANT + | vbVariant | Variant |
|
<任何内容 >|VT_ARRAY | - | - | - | 按位组合 |
<任何内容 >|VT_BYREF | - | - | - | 按位组合 |
+ 表示特定于 Windows 的类型。不是标准 C/C++ 的一部分。 |
下表列出了从 MATLAB 转换到 COM 的规则。
MATLAB 到 COM VARIANT 的转换规则
MATLAB 数据类型 | 标量数据的 VARIANT 类型 | 数组数据的 VARIANT 类型 | 注释 |
---|---|---|---|
cell | 1×1 元胞数组转换为单个 | 多维单元元胞数组转换为 | |
structure |
|
| MATLAB |
char | 1×1 | 在 MATLAB 中,假设一个 1×L 的 | 字符向量数组不支持作为 |
sparse |
|
| MATLAB 稀疏数组被转换为 |
double | 实数 1×1 双精度矩阵转换为 | 实数多维双精度矩阵转换为 | 使用 |
single | 实数 1×1 单矩阵转换为 | 实数多维单矩阵转换为 | 使用 |
int8 | 实数 1×1 | 实数多维 | 使用 |
uint8 | 实数 1×1 | 实数多维 | 使用 |
int16 | 实数 1×1 | 实数多维 | 使用 |
uint16 | 实数 1×1 | 实数多维 | 使用 |
int32 | 1×1 | 多维 | 使用 |
uint32 | 1×1 | 多维 | 使用 |
函数句柄 |
|
| 不支持 |
Java® 类 |
|
| 不支持 |
用户类 |
|
| 不支持 |
逻辑值 |
|
|
下表列出了从 COM 到 MATLAB 转换规则。
COM VARIANT 到 MATLAB 的转换规则
VARIANT 类型 | MATLAB 数据类型(标量或数组数据) | 注释 |
---|---|---|
VT_EMPTY | 不适用 | 创建的数组为空。 |
VT_I1 | int8 | |
VT_UI1 | uint8 | |
VT_I2 | int16 | |
VT_UI2 | uint16 | |
VT_I4 | int32 | |
VT_UI4 | uint32 | |
VT_R4 | single | |
VT_R8 | double | |
VT_CY | double | |
VT_BSTR | char |
|
VT_ERROR | int32 | |
VT_DATE | double | 1. 从 1899 年 12 月 31 日午夜开始, |
VT_INT | int32 | |
VT_UINT | uint32 | |
VT_DECIMAL | double | |
VT_BOOL | logical | |
VT_DISPATCH | (视情况而定) |
目前,支持 Excel® |
<任何内容 >|VT_BYREF | (视情况而定) | 指向任何基本类型的指针都会根据它们指向的规则进行处理。生成的 MATLAB 数组包含值的深度复制。 |
<任何内容 >|VT_ARRAY | (视情况而定) | 多维 |