比如有个变为VARIANT * FAR a 我怎样把它转化为CSting类型的变量呢?

解决方案 »

  1.   

    比如有个变为VARIANT  FAR* a 我怎样把它转化为CSting类型的变量呢?
      

  2.   

    CSting str;
    str=(VT_BSTRT)var;
      

  3.   

    不行啊,编译通不过
    error C2146: syntax error : missing ';' before identifier 'var'
      

  4.   

    还是不行啊,只得到了a的第一个字符,后面的没得到,比如a = "123",像str = a->pcVal;这样
    str的结果是'1'后面没有了
      

  5.   

    str = (CString)a->bstrVal
      

  6.   

    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;
      

  7.   

    这是我做的一个例子,看是否是你所需要的。
    VARIANT a;
    a.vt = VT_VARIANT;
    CString b = "102";
    a.bstrVal = (_bstr_t) b;
    CString str =(BSTR)a.pbstrVal;