VARIANT Data Type

Key points when usings VARIANT data type:


///////////////////////////////////////////////////////////////////////////////

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