简单讲就是怎么将一个VARIANT变量转换成为字符串变量并且存放到一个char AA[100]里面去。我用的是VC6.0。    详细:我在用OLE操作Excel,现在使用GetItem 从Excel里面单元格获取数据。得到的返回值是一个VARIANT变量,虽然我不清楚这是一个怎样的变量。但是这不是我考虑的,我想要的是把变量里的值当字符串存放到我指定的字符串数组里面去。    求解答,或者给个具体的解决例子参考。

解决方案 »

  1.   

    VARIANT var;
    var.pcVal就是char*类型的数据。
      

  2.   

    VARIANT vt;
    strncpy(AA ,(char *)(_bstr_t)vt.bstrVal,100);//强制转换 
      

  3.   

    资料来源:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8885.html六、VARIANT
      C++、BASIC、Java、Pascal、Script......计算机语言多种多样,而它们各自又都有自己的数据类型,COM 产生目的,其中之一就是要跨语言(注3)。而 VARIANT 数据类型就具有跨语言的特性,同时它可以表示(存储)任意类型的数据。从C语言的角度来讲,VARIANT 其实是一个结构,结构中用一个域(vt)表示------该变量到底表示的是什么类型数据,同时真正的数据则存贮在 union 空间中。结构的定义太长了(虽然长,但其实很简单)大家去看 MSDN 的描述吧,这里给出如何使用的简单示例:学生:我想用 VARIANT 表示一个4字节长的整数,如何做?
    老师:VARIANT v; v.vt=VT_I4; v.lVal=100;学生:我想用 VARIANT 表示布尔值“真”,如何做?
    老师:VARIANT v; v.vt=VT_BOOL; v.boolVal=VARIANT_TRUE;
    学生:这么麻烦?我能不能 v.boolVal=true; 这样写?
    老师:不可以!因为
     
    类型 字节长度 假值 真值
    bool 1(char) 0(false) 1(true)
    BOOL 4(int) 0(FALSE) 1(TRUE)
    VT_BOOL 2(short int) 0(VARIANT_FALSE) -1(VARIANT_TRUE)
      所以如果你 v.boolVal=true 这样赋值,那么将来 if(VARIANT_TRUE==v.boolVal) 的时候会出问题(-1 != 1)。但是你注意观察,任何布尔类型的“假”都是0,因此作为一个好习惯,在做布尔判断的时候,不要和“真值”相比较,而要与“假值”做比较。
    学生:谢谢老师,你太牛了。我对老师的敬仰如滔滔江水,连绵不绝......学生:我想用 VARIANT 保存字符串,如何做?
    老师:VARIANT v; v.vt=VT_BSTR; v.bstrVal=SysAllocString(L"Hello,你好");学生:哦......我明白了。可是这么操作真够麻烦的,有没有简单一些的方法?
    老师:有呀,你可以使用现成的包装类 CComVariant、COleVariant、_variant_t。比如上面三个问题就可以这样书写:CComVariant v1(100),v2(true),v3("Hello,你好"); 简单了吧?!(注4)学生:老师,我再问最后一个问题,我如何用 VARIANT 保存一个数组?
    老师:这个问题很复杂,我现在不能告诉你,我现在告诉你怕你印象不深......(注5)
    学生:~!@#$%^&*()......晕!
      

  4.   

    最后还得我自己来提供一个确实的解决办法:
    CString str_xlsToOther="";
    str_xlsToOther= (LPCTSTR)(_bstr_t)VA_A_Buffer; //VA_A_Buffer是VARIANT变量。