在 Windows 中,VARIANT 是一种通用数据类型,用于处理各种不同的数据类型。VARIANT 中的 vt 成员变量指示 VARIANT 存储的数据类型。
typedef /* [wire_marshal] */ struct tagVARIANT VARIANT;
struct tagVARIANT
{
union
{
struct __tagVARIANT
{
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union
{
LONGLONG llVal;
LONG lVal;
BYTE bVal;
SHORT iVal;
FLOAT fltVal;
DOUBLE dblVal;
VARIANT_BOOL boolVal;
VARIANT_BOOL __OBSOLETE__VARIANT_BOOL;
SCODE scode;
CY cyVal;
DATE date;
BSTR bstrVal;
IUnknown *punkVal;
IDispatch *pdispVal;
SAFEARRAY *parray;
BYTE *pbVal;
SHORT *piVal;
LONG *plVal;
LONGLONG *pllVal;
FLOAT *pfltVal;
DOUBLE *pdblVal;
VARIANT_BOOL *pboolVal;
VARIANT_BOOL *__OBSOLETE__VARIANT_PBOOL;
SCODE *pscode;
CY *pcyVal;
DATE *pdate;
BSTR *pbstrVal;
IUnknown **ppunkVal;
IDispatch **ppdispVal;
SAFEARRAY **pparray;
VARIANT *pvarVal;
PVOID byref;
CHAR cVal;
USHORT uiVal;
ULONG ulVal;
ULONGLONG ullVal;
INT intVal;
UINT uintVal;
DECIMAL *pdecVal;
CHAR *pcVal;
USHORT *puiVal;
ULONG *pulVal;
ULONGLONG *pullVal;
INT *pintVal;
UINT *puintVal;
struct __tagBRECORD
{
PVOID pvRecord;
IRecordInfo *pRecInfo;
} __VARIANT_NAME_4;
} __VARIANT_NAME_3;
} __VARIANT_NAME_2;
DECIMAL decVal;
} __VARIANT_NAME_1;
} ;
以下是一些常用的 vt 类型及其说明:
- VT_EMPTY:空的 VARIANT 对象。
- VT_NULL:NULL 值。
- VT_I2:16 位有符号整数。成员变量为 iVal。
- VT_I4:32 位有符号整数。成员变量为 lVal。
- VT_R4:单精度浮点数。成员变量为 fltVal。
- VT_R8:双精度浮点数。成员变量为 dblVal。
- VT_CY:货币类型,使用一个 64 位整数表示。成员变量为 cyVal。
- VT_DATE:日期类型,使用一个双精度浮点数表示。成员变量为 date。
- VT_BSTR:Unicode 字符串。成员变量为 bstrVal。
- VT_DISPATCH:指向 IDispatch 接口的指针。成员变量为 pdispVal。
- VT_ERROR:HRESULT 错误代码。成员变量为 scode。
- VT_BOOL:布尔值。成员变量为 boolVal。
- VT_VARIANT:另一个 VARIANT 对象的指针。成员变量为 pvarVal。
- VT_UNKNOWN:指向 IUnknown 接口的指针。成员变量为 punkVal。
- VT_DECIMAL:使用一个 DECIMAL 结构体表示的精度数值。成员变量为 decVal。
- VT_I1:8 位有符号整数。成员变量为 cVal。
- VT_UI1:8 位无符号整数。成员变量为 bVal。
- VT_UI2:16 位无符号整数。成员变量为 uiVal。
- VT_UI4:32 位无符号整数。成员变量为 ulVal。
- VT_INT:机器字长整数。成员变量为 intVal。
- VT_UINT:机器字长无符号整数。成员变量为 uintVal。
- VT_ARRAY:数组类型。成员变量为 parray。
- VT_BYREF:指针类型。成员变量为 byref。
除了上述常用的 vt 类型之外,还有一些其他的 vt 类型,如 VT_RECORD(自定义记录类型)和 VT_USERDEFINED(用户定义类型)。需要根据实际情况选择合适的 vt 类型来存储数据。
浙公网安备 33010602011771号