variant到底是个什么东西?
.vt属性可以改变存储的值?怎么存数组呢?
一个VARIANT对象可以存许多不同类型的数据吗?
为啥在VC6里,看不到给VARIANT赋值的结果呢..

解决方案 »

  1.   

    你可以看出是模板类。支持类型有以下几种
    Constructs a _variant_t object.
    _variant_t( ) throw( );_variant_t(
       const VARIANT& varSrc 
    );_variant_t(
       const VARIANT* pVarSrc 
    );_variant_t(
       const _variant_t& var_t_Src 
    );_variant_t(
       VARIANT& varSrc,
       bool fCopy 
    );_variant_t(
       short sSrc,
       VARTYPE vtSrc = VT_I2 
    );_variant_t(
       long lSrc,
       VARTYPE vtSrc = VT_I4 
    );_variant_t(
       float fltSrc 
    ) throw( );_variant_t(
       double dblSrc,
       VARTYPE vtSrc = VT_R8 
    );_variant_t(
       const CY& cySrc 
    ) throw( );_variant_t(
       const _bstr_t& bstrSrc 
    );_variant_t(
       const wchar_t *wstrSrc 
    );_variant_t(
       const char* strSrc 
    );_variant_t(
       IDispatch* pDispSrc,
       bool fAddRef = true 
    ) throw( );_variant_t(
       bool bSrc 
    ) throw( );_variant_t(
       IUnknown* pIUknownSrc,
       bool fAddRef = true 
    ) throw( );_variant_t(
       const DECIMAL& decSrc 
    ) throw( );_variant_t(
       BYTE bSrc 
    ) throw( );variant_t(
       char cSrc
    ) throw();_variant_t(
       unsigned short usSrc
    ) throw();_variant_t(
       unsigned long ulSrc
    ) throw();_variant_t(
       int iSrc
    ) throw();_variant_t(
       unsigned int uiSrc
    ) throw();_variant_t(
       __int64 i8Src
    ) throw();_variant_t(
       unsigned __int64 ui8Src
    ) throw();
      

  2.   

    VARIANT 表示一个4字节长的整数
    VARIANT v; v.vt=VT_I4; v.lVal=100; VARIANT 表示布尔值“真”
    VARIANT v; v.vt=VT_BOOL; v.boolVal=VARIANT_TRUE;
      

  3.   

    VARIANT 其实就是一个结构体,你自己可以查下它的定义
      

  4.   

    typedef struct tagVARIANT VARIANT;struct tagVARIANT  { union  { struct __tagVARIANT {   VARTYPE vt;   // typedef unsigned short VARTYPE WORD wReserved1; WORD wReserved2; WORD wReserved3; union  { LONGLONG         llval;              // VT_I8.  LONG                     lVal;               // VT_I4. BYTE                     bVal;              // VT_UI1. SHORT                    iVal;               // VT_I2. FLOAT                    fltVal;             // VT_R4. DOUBLE                   dblVal;             // VT_R8. VARIANT_BOOL        boolVal;           // VT_BOOL. _VARIANT_BOOL      bool; 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. LONGLONG              * pllVal;          // VT_BYREF|VT_I8. FLOAT                    * pfltVal;         // VT_BYREF|VT_R4. DOUBLE                   * pdblVal;         // VT_BYREF|VT_R8. VARIANT_BOOL        * pboolVal;        // VT_BYREF|VT_BOOL. _VARIANT_BOOL      * pbool; 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. IDispatch                ** 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. ULONGLONG            ullVal;            // VT_UI8. 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                   * pulVal;          // VT_BYREF|VT_UI4. ULONGLONG           * pullVal;         // VT_BYREF|VT_UI8. INT                      * pintVal;         // VT_BYREF|VT_INT. UINT                     * puintVal;        // VT_BYREF|VT_UINT. struct __tagBRECORD { PVOID                   pvRecord; IRecordInfo             *pRecInfo; }    __VARIANT_NAME_4; }    __VARIANT_NAME_3; }    __VARIANT_NAME_2; DECIMAL decVal; }    __VARIANT_NAME_1;};
    给VARIANT变量的赋值的时候,首先给vt成员赋值,指定类型,再对union中相同数据类型的变量赋值,VARIANT va;int a=2001;va.vt=VT_I4; //  指明整型数据va.lVal=a;     //  赋值