COleVariant ValueVt;
ValueVt.ChangeType( VT_DISPATCH );  // 程序运行到这里的时候出错,错误提示为:"类型不匹配",请问这是怎么回事?谢谢!

解决方案 »

  1.   

    五、VARIANT 、_variant_t 与 COleVariant
    VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
    对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
    VARIANT va;
    int a=2001;
    va.vt=VT_I4;///指明整型数据
    va.lVal=a; ///赋值对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:Byte bVal;  // VT_UI1. 
    Short iVal;  // VT_I2. 
    long lVal;  // VT_I4. 
    float fltVal;  // VT_R4. 
    double dblVal;  // VT_R8. 
    VARIANT_BOOL boolVal;  // VT_BOOL. 
    SCODE scode;  // VT_ERROR. 
    CY cyVal;  // VT_CY. 
    DATE date;  // VT_DATE. 
    BSTR bstrVal;  // VT_BSTR. 
    DECIMAL FAR* pdecVal  // VT_BYREF|VT_DECIMAL. 
    IUnknown FAR* punkVal;  // VT_UNKNOWN. 
    IDispatch FAR* pdispVal;  // VT_DISPATCH. 
    SAFEARRAY FAR* parray;  // VT_ARRAY|*. 
    Byte FAR* pbVal;  // VT_BYREF|VT_UI1. 
    short FAR* piVal;  // VT_BYREF|VT_I2. 
    long FAR* plVal;  // VT_BYREF|VT_I4. 
    float FAR* pfltVal;  // VT_BYREF|VT_R4. 
    double FAR* pdblVal;  // VT_BYREF|VT_R8. 
    VARIANT_BOOL FAR* pboolVal;  // VT_BYREF|VT_BOOL. 
    SCODE FAR* pscode;  // VT_BYREF|VT_ERROR. 
    CY FAR* pcyVal;  // VT_BYREF|VT_CY. 
    DATE FAR* pdate;  // VT_BYREF|VT_DATE. 
    BSTR FAR* pbstrVal;  // VT_BYREF|VT_BSTR. 
    IUnknown FAR* FAR* ppunkVal;  // VT_BYREF|VT_UNKNOWN. 
    IDispatch FAR* FAR* ppdispVal;  // VT_BYREF|VT_DISPATCH. 
    SAFEARRAY FAR* FAR* pparray;  // VT_ARRAY|*. 
    VARIANT FAR* pvarVal;  // VT_BYREF|VT_VARIANT. 
    void FAR* byref;  // Generic ByRef. 
    char cVal;  // VT_I1. 
    unsigned short uiVal;  // VT_UI2. 
    unsigned long ulVal;  // VT_UI4. 
    int intVal;  // VT_INT. 
    unsigned int uintVal;  // VT_UINT. 
    char FAR * pcVal;  // VT_BYREF|VT_I1. 
    unsigned short FAR * puiVal;  // VT_BYREF|VT_UI2. 
    unsigned long FAR * pulVal;  // VT_BYREF|VT_UI4. 
    int FAR * pintVal;  // VT_BYREF|VT_INT. 
    unsigned int FAR * puintVal;  //VT_BYREF|VT_UINT. 
    _variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
    使用时需加上#include <comdef.h>
    例如:
    long l=222;
    ing i=100;
    _variant_t lVal(l);
    lVal = (long)i;
    COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
    COleVariant v3 = "字符串", v4 = (long)1999;
    CString str =(BSTR)v3.pbstrVal;
    long i = v4.lVal;
      

  2.   

    http://community.csdn.net/Expert/topic/3704/3704278.xml?temp=.8428766
      

  3.   

    VARIANT v;
    v.vt = 准备设置的类型;