帮忙讲解一下
long l=222;
ing i=100;
_variant_t lVal(l);
lVal = (long)i;
查了半天,没找到答案还有就是如下的
_variant_t vStr;
BSTR    bStr;
vStr=rgMyRge.GetItem(_variant_t((long)1),_variant_t((long)h));
  bStr = (_bstr_t)vStr;
多谢了。

解决方案 »

  1.   

    补充一个。呵呵
    for(int i=0;i<6;i++)
       {
        if(((char)*(bStr+i)>='0')&&((char)*(bStr+i)<='9'))
          out2[i]=(char)*(bStr+i);
       }多谢各位高手了
      

  2.   

    _variant_t和_bstr_t这两个类分别封装并管理VARIANT和BSTR这两种数据类型,VARIANT和BSTR这两种类型是COM中使用的数据类型。为了C++中的变量应用到ADO编程中,只能进行数据类型的转换。_variant_t和_bstr_t这两个类,就可以方便的把C++类型变量转换成COM中的变量了你去看下VARIANT和BSTR的数据结构就好了
      

  3.   

    上面那个是强制转换,typedef struct tagVARIANT {
      VARTYPE vt;
      unsigned short wReserved1;
      unsigned short wReserved2;
      unsigned short wReserved3;
      union {
      Byte bVal; // VT_UI1.
      Short iVal; // VT_I2.
      long lVal; // VT_I4.注意看这行
      float fltVal; // VT_R4.
      // ...
      };
      };long类型对应的是lVal,所以你要用_variant_t lVal(l)。
      

  4.   

    MSDN对VARIANT的描述 typedef struct FARSTRUCT tagVARIANT VARIANT;
    typedef struct FARSTRUCT tagVARIANT VARIANTARG;
    typedef struct tagVARIANT  {
        VARTYPE vt;
        unsigned short wReserved1;
        unsigned short wReserved2;
        unsigned short wReserved3;
        union {
            unsigned char        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.
            IUnknown                FAR* punkVal;            // VT_UNKNOWN.
            IDispatch             FAR* pdispVal;            // VT_DISPATCH.
            SAFEARRAY            FAR* parray;            // VT_ARRAY|*.
            unsigned char        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.
        };
    };
      

  5.   

    谢谢,可是,比较急,那里有时间研究啊,就是把上面的理解了,稍微一改就行了。
    long l=222; 
    ing i=100; 
    _variant_t lVal(l); 
    lVal = (long)i; 
    这段代码的结果是什么?
    lVal 最后等于多少。谢谢
      

  6.   

     bStr = (_bstr_t)vStr,这个也是强制转换,BSTR是COM中默认的字符串数据格式,和char* 及std::string等不同,BSTR is a null-terminated, length-prefixed, unicode string。_bstr_t 是BSTR的封装类,实际上是一个智能指针
      

  7.   

    不是ing i=100而是int i=100吧?_variant_t lVal(l); 这个执行过,lVal是222的,下一句变成100了
      

  8.   

    VARIANT v;
    v.vt=VT_I4;
    v.IVal=i;
      

  9.   

    _variant_t有一个参数类型为long的构造函数,所以_variant_t lval(l); 就是调用了它的这个构造函数,结果vt==VT_I4, lval==222
    它也有重载一个参数类型为long的赋值操作符,所以lval = (long)i; 就是调用了它的这个赋值操作符函数,结果vt==VT_I4, lval==100
      

  10.   

    (((char)*(bStr+i)>='0')&&((char)*(bStr+i) <='9'))
    这个,我还是没懂,呵呵。再麻烦一下吧
      

  11.   

    bStr你可以理解成一个字符的数组头指针,被强制换成char *了以便读取。bStr+1就是第2个元素,bStr本身指向第一个元素
    (((char)*(bStr+i)>='0')&&((char)*(bStr+i) <='9')) 
    就是判断第i+1个元素是不是'0'-'9'之间,如果是的话,估计就是想转换成数字来做某些操作了