C++のVARIANT型のタイプ取得は、vt(VARTYPE)で参照できる。
VARTYPEの種類とデータの入り方について。
VARTYPEの種類
VARTYPEは、wtypes.hに定義されている。種類は以下の通り。
名前 | 値 | 説明 |
---|---|---|
VT_EMPTY | 0 | 値が未定義であることを示す。 |
VT_NULL | 1 | NULL 値. SQL の NULL 相当 |
VT_I2 | 2 | short 型 |
VT_I4 | 3 | long 型 (32bit). COM では 32bit 整数は LONG と定義される。 |
VT_R4 | 4 | float 型 |
VT_R8 | 5 | double 型 |
VT_CY | 6 | CURRENCY 型 |
VT_DATE | 7 | DATE 型 |
VT_BSTR | 8 | BSTR 型文字列 |
VT_DISPATCH | 9 | IDispatch ポインタ |
VT_ERROR | 10 | SCODE 型 |
VT_BOOL | 11 | ブール型 |
VT_VARIANT | 12 | VARIANT のポインタ |
VT_UNKNOWN | 13 | IUnknown ポインタ |
VT_DECIMAL | 14 | 10進数 |
VT_I1 | 16 | char 型 |
VT_UI1 | 17 | BYTE 型 |
VT_UI2 | 18 | unsigned short 型 |
VT_UI4 | 19 | unsigned long 型 (32-bit) |
VT_I8 | 20 | 64-bit 整数型 (LONG LONG) |
VT_UI8 | 21 | 64-bit unsigned integer. |
VT_INT | 22 | 整数 |
VT_UINT | 23 | 符号なしの整数 |
VT_VOID | 24 | C の void 型 |
VT_HRESULT | 25 | HRESULT 型 |
VT_PTR | 26 | ポインタ型 |
VT_SAFEARRAY | 27 | SAFEARRAY 型. VARIANT の中では無効 (エラー) になる。 |
VT_CARRAY | 28 | C スタイル配列 |
VT_USERDEFINED | 29 | ユーザ定義型 |
VT_LPSTR | 30 | NULL 終端された文字列 |
VT_LPWSTR | 31 | NULL 終端されたワイド文字列 |
VT_RECORD | 36 | ユーザ定義型 |
VT_INT_PTR | 37 | |
VT_UINT_PTR | 38 | |
VT_FILETIME | 64 | FILETIME 型 |
VT_BLOB | 65 | Indicates length prefixed bytes. |
VT_STREAM | 66 | Indicates that the name of a stream follows. |
VT_STORAGE | 67 | Indicates that the name of a storage follows. |
VT_STREAMED_OBJECT | 68 | Indicates that a stream contains an object. |
VT_STORED_OBJECT | 69 | Indicates that a storage contains an object. |
VT_BLOB_OBJECT | 70 | Indicates that a blob contains an object. |
VT_CF | 71 | Clipboard フォーマット |
VT_CLSID | 72 | クラスID |
VT_VERSIONED_STREAM | 73 | |
VT_BSTR_BLOB | 0xfff | |
VT_VECTOR | 0x1000 | Indicates a simple, counted array. |
VT_ARRAY | 0x2000 | SAFEARRAY のポインタ |
VT_BYREF | 0x4000 | 参照型であることを示す。 |
VT_RESERVED | 0x8000 | |
VT_ILLEGAL | 0xffff | |
VT_ILLEGALMASKED | 0xfff | |
VT_TYPEMASK | 0xfff |
データの入り方
VARTYPEは、上記複数種類が入ることがある。
その場合、データはORとなる。
VT_ARRAY | VT_I8 8212(0x2000 + 20(0x0014) = 0x2014)