VARIANT members table

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 int
long int (p)lVal 3 VT_I4 [V][T][P][S] 4 byte signed int
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
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] IDispatch *
SCODE int (p)scode 10 VT_ERROR [V][T][P][S] SCODE
VARIANT_BOOL word (p)boolVal 11 VT_BOOL [V][T][P][S] True=-1, False=0
VARIANT* VARIANT* pvarVal 12 VT_VARIANT [V][T][P][S] VARIANT *
IUnknown* IUnknown (p)punkVal 13 VT_UNKNOWN [V][T] [S] IUnknown *
DECIMAL DECIMAL (p)decVal 14 VT_DECIMAL [V][T] [S] 14 bytes
char byte (p)cVal 16 VT_I1 [V][T][P][S] signed char
BYTE byte (p)bVal 17 VT_UI1 [V][T][P][S] unsigned char
unsigned short word (p)uiVal 18 VT_UI2 [V][T][P][S] unsigned short
unsigned long int (p)ulVal 19 VT_UI4 [V][T][P][S] unsigned long
      20 VT_I8 [T][P] signed 64-bit int
      21 VT_UI8 [T][P] unsigned 64-bit int
int int (p)intVal 22 VT_INT [V][T][P][S] signed machine int
unsigned int int (p)uintVal 23 VT_UINT [V][T] [S] unsigned machine int
void* byte* byref 24 VT_VOID [T] C style void
           
      25 VT_HRESULT [T] Standard return type
      26 VT_PTR [T] pointer type
    (p)parray 27 VT_SAFEARRAY [T] (use VT_ARRAY in VARIANT)
      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
      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] A Class ID
      0x1000 VT_VECTOR [P] simple counted array
      0x2000 VT_ARRAY [V] SAFEARRAY*
      0x4000 VT_BYREF [V] void* for local use

 

[V] - can appear in VARIANT.

(p) - exsists also member with p prefix. It is pointer, therefore vt must include VT_BYREF.

For VARIANT* (pvarVal), vt must include VT_BYREF.

For safe arrays, vt combines element type and VT_ARRAY.