Variant

Variant is a generic variable type in VB and Java script or VC++ automation.

Variant is a type to hold any data type or array of any type. Thus Variant is constructed as structure with a field to hold data type (VARTYPE vt) and another field to hold the value. All type of variables are union to this field.

VARIANT type definition

typedef /* [wire_marshal] */ struct tagVARIANT VARIANT;

struct  tagVARIANT
  {
  union 
    {
    struct  __tagVARIANT
      {
      VARTYPE vt;
      WORD wReserved1;
      WORD wReserved2;
      WORD wReserved3;
      union 
        {
        LONG lVal;
        BYTE bVal;
        SHORT iVal;
        FLOAT fltVal;
        DOUBLE dblVal;
        VARIANT_BOOL boolVal;
        _VARIANT_BOOL bool;
        SCODE scode;
        CY cyVal;
        DATE date;
        BSTR bstrVal;
        IUnknown __RPC_FAR *punkVal;
        IDispatch __RPC_FAR *pdispVal;
        SAFEARRAY __RPC_FAR *parray;
        BYTE __RPC_FAR *pbVal;
        SHORT __RPC_FAR *piVal;
        LONG __RPC_FAR *plVal;
        FLOAT __RPC_FAR *pfltVal;
        DOUBLE __RPC_FAR *pdblVal;
        VARIANT_BOOL __RPC_FAR *pboolVal;
        _VARIANT_BOOL __RPC_FAR *pbool;
        SCODE __RPC_FAR *pscode;
        CY __RPC_FAR *pcyVal;
        DATE __RPC_FAR *pdate;
        BSTR __RPC_FAR *pbstrVal;
        IUnknown __RPC_FAR *__RPC_FAR *ppunkVal;
        IDispatch __RPC_FAR *__RPC_FAR *ppdispVal;
        SAFEARRAY __RPC_FAR *__RPC_FAR *pparray;
        VARIANT __RPC_FAR *pvarVal;
        PVOID byref;
        CHAR cVal;
        USHORT uiVal;
        ULONG ulVal;
        INT intVal;
        UINT uintVal;
        DECIMAL __RPC_FAR *pdecVal;
        CHAR __RPC_FAR *pcVal;
        USHORT __RPC_FAR *puiVal;
        ULONG __RPC_FAR *pulVal;
        INT __RPC_FAR *pintVal;
        UINT __RPC_FAR *puintVal;
        struct  __tagBRECORD
          {
          PVOID pvRecord;
          IRecordInfo __RPC_FAR *pRecInfo;
          }	__VARIANT_NAME_4;
        }	__VARIANT_NAME_3;
      }	__VARIANT_NAME_2;
    DECIMAL decVal;
    }	__VARIANT_NAME_1;
  };
typedef VARIANT __RPC_FAR *LPVARIANT;

/* CComVariant is a wrapping class */
class CComVariant : public tagVARIANT
{
};

Sample Code

VARIANT va;
VariantInit(&va);
V_VT(&va) = VT_I4;
V_I4(&va) = i;
hret = windows->Item(va,&disp); 
VariantClear(&va);

About our authors: Team EQA

You have viewed 1 page out of 67. Your COM/DCOM learning is 0.00% complete. Login to check your learning progress.

#