VARIANT Data Type
Key points when usings VARIANT data type:
- Variant type is actually a collection of more then 40 data types;
- Variant type has two fields. First, vt, determines type in the second
field;
- Scripting language like VBScript is using Variant type. VBScript is a typeless
language. It has types for compatibility with another languages;
///////////////////////////////////////////////////////////////////////////////
struct tagVARIANT {
union {
struct __tagVARIANT {
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union {
LONG lVal; //VT_I4
BYTE bVal; //VT_UI1
SHORT iVal; //VT_I2
FLOAT fltVal; //VT_R4
DOUBLE dblValue; //VT_R8
VARIANT_BOOL boolVal; //VT_BOOL
_VARIANT_BOOL bool; // (obsolete)
SCODE scode; //VT_ERROR
CY cyVal; //VT_CY
DATE date; //VT_DATE
BSTR bstrVal; //VT_BSTR
IUnknown * punkVal; //VT_UNKNOWN
IDispatch * pdispVal; //VT_DISPATCH
SAFEARRAY * parray; //VT_ARRAY
BYTE * pbVal; //VT_BYREF|VT_UI1
SHORT * piVal; //VT_BYREF|VT_I2
LONG * plVal; //VT_BYREF|VT_I4
FLOAT * pfltVal; //VT_BYREF|VT_R4
DOUBLE * pdblVal; //VT_BYREF|VT_R8
VARIANT_BOOL * pboolVal //VT_BYREF|VT_BOOL
_VARIANT_BOOL * pboolVal // (obsolete)
SCODE * pscode; //VT_BYREF|VT_ERROR
CY * pcyVal; //VT_BYREF|VT_CY
DATE * pdate; //VT_BYREF|VT_DATE
BSTR * pbstrVal; //VT_BYREF|VT_BSTR
IUnknown ** ppunkVal; //VT_BYREF|VT_UNKNOWN
IDispach ** ppdispVal; //VT_BYREF|VT_DISPATCH
SAFEARRAY ** pparray; //VT_BYREF|VT_ARRAY
VARIANT * pvarVal; //VT_BYREF|VT_VARIANT
PVOID byref; //Generic ByRef
CHAR cVal; //VT_I1
USHORT uiVal; //VT_UI2
ULONG ulVal; //VT_UI4
INT intVal; //VT_INT
UINT uintVal; //VT_UINT
DECIMAL * pdecVal; //VT_BYREF|VT_DECIMAL
CHAR * pcVal; //VT_BYREF|VT_I1
USHORT * puiVal; //VT_BYREF|VT_UI2
ULONG * puiVal; //VT_BYREF|VT_UI4
INT * pintVal; //VT_BYREF|VT_INT
UINT * pintVal; //VT_BYREF|VT_UINT;
struct __tagRecord {
PVOID pvRecord
IRecordInfo * pRecInfo
} __VARIANT_NAME_4; //VT_RECORD
} __VARIANT_NAME_3;
} __VARIANT_NAME_2;
DECIMAL decVal;
} __VARIANT_NAME_1;
};
////////////////////////////////////////////////////
August 20, 2000