C type | QM type | Name | vt | vt constant | Comments |
---|---|---|---|---|---|
0 | VT_EMPTY | [V] [P] nothing | |||
1 | VT_NULL | [V] [P] SQL style Null | |||
short | word | (p)iVal | 2 | VT_I2 | [V][T][P][S] 2 byte signed integer |
int, long | int | (p)lVal | 3 | VT_I4 | [V][T][P][S] 4 byte signed integer |
float | FLOAT | (p)fltVal | 4 | VT_R4 | [V][T][P][S] 4 byte real |
double | double | (p)dblVal | 5 | VT_R8 | [V][T][P][S] 8 byte real |
CY | CURRENCY | (p)cyVal | 6 | VT_CY | [V][T][P][S] currency |
DATE | DATE | (p)date | 7 | VT_DATE | [V][T][P][S] date/time |
BSTR | BSTR | (p)bstrVal | 8 | VT_BSTR | [V][T][P][S] OLE Automation string |
IDispatch* | IDispatch | (p)pdispVal | 9 | VT_DISPATCH | [V][T][P][S] interface that supports IDispatch |
SCODE | int | (p)scode | 10 | VT_ERROR | [V][T][P][S] error code |
VARIANT_BOOL | word | (p)boolVal | 11 | VT_BOOL | [V][T][P][S] boolean. True=-1 (0xffff in word), False=0. |
VARIANT* | VARIANT* | pvarVal | 12 | VT_VARIANT | [V][T][P][S] In VARIANT it is pointer to other VARIANT, with VT_BYREF flag. In array not pointer. |
IUnknown* | IUnknown | (p)punkVal | 13 | VT_UNKNOWN | [V][T] [S] interface that does not support IDispatch |
DECIMAL | DECIMAL | (p)decVal | 14 | VT_DECIMAL | [V][T] [S] uses whole VARIANT |
char | byte | (p)cVal | 16 | VT_I1 | [V][T][P][S] 1 byte signed integer |
BYTE (unsigned char) | byte | (p)bVal | 17 | VT_UI1 | [V][T][P][S] 1 byte unsigned integer |
WORD (unsigned short) | word | (p)uiVal | 18 | VT_UI2 | [V][T][P][S] 2 byte unsigned integer |
DWORD (unsigned long) | int | (p)ulVal | 19 | VT_UI4 | [V][T][P][S] 4 byte unsigned integer |
__int64 | long | (p)llVal | 20 | VT_I8 | [V][T][P][S] 8 byte signed integer |
unsigned __int64 | long | (p)ullVal | 21 | VT_UI8 | [V][T][P][S] 8 byte unsigned integer |
int | int | (p)intVal | 22 | VT_INT | [V][T][P][S] use VT_I4 instead |
UINT (unsigned int) | int | (p)uintVal | 23 | VT_UINT | [V][T] [S] use VT_UI4 instead |
void* | byte* | byref | 24 | VT_VOID | [T] C style void |
25 | VT_HRESULT | [T] Standard return type | |||
26 | VT_PTR | [T] pointer type | |||
27 | VT_SAFEARRAY | [T] safe array | |||
28 | VT_CARRAY | [T] C style array | |||
29 | VT_USERDEFINED | [T] user-defined type | |||
30 | VT_LPSTR | [T][P] null terminated string | |||
31 | VT_LPWSTR | [T][P] wide null terminated string | |||
pvRecord | 36 | VT_RECORD | [V] [P][S] user-defined type. In QM used only in arrays. | ||
64 | VT_FILETIME | [P] FILETIME | |||
65 | VT_BLOB | [P] Length prefixed bytes | |||
66 | VT_STREAM | [P] Name of the stream follows | |||
67 | VT_STORAGE | [P] Name of the storage follows | |||
68 | VT_STREAMED_OBJECT | [P] Stream contains an object | |||
69 | VT_STORED_OBJECT | [P] Storage contains an object | |||
70 | VT_BLOB_OBJECT | [P] Blob contains an object | |||
71 | VT_CF | [P] Clipboard format | |||
72 | VT_CLSID | [P] Class ID | |||
0x1000 | VT_VECTOR | [P] simple counted array (flag) | |||
(p)parray | 0x2000 | VT_ARRAY | [V] SAFEARRAY* (flag) | ||
0x4000 | VT_BYREF | [V] pointer (flag) |
If SAFEARRAY* (ARRAY in QM) is stored in VARIANT, vt is element type with VT_ARRAY flag.
(p) - exists member with p prefix. It is pointer, and vt is with VT_BYREF flag.
[V] - may appear in a VARIANT.
[S] - may appear in a SAFEARRAY.
[P] - may appear in an OLE property set.
[T] - may appear in a TYPEDESC (type library).