下面一段话是为了将variant_inp传给m_strReceive,你也可不必看下面代码,直接告诉我如何将VARIANT 转换为CString型.
         VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp,m_strReceive;
if(m_ctrlComm.GetCommEvent()==2) //表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput();//读缓冲区
safearray_inp=variant_inp;
                  len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++) //将数组转换为CString变量
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
m_strReceive+=strtemp;
}
         }

解决方案 »

  1.   

    一个Variant里面可以存放很多数据类型,你这样说太笼统了.
    我给你个例子.
    CComVariant var;
    ...
    CString str;
    switch( V_VT( &var ) )
    {
    case VT_BSTR:
    str = V_BSTR( &var );
    break;
    case VT_INT:
    str.format( _T("%d") , V_INT( &var ) );
    break;
    ....
    ....
    default:
    break;
    }
    根据不同的数据类型你要做不同的处理
      

  2.   

    //其余数据类型转换为CString 类型
    CString CCrack::strVARIANT(const COleVariant& var)
    {
      CString strRet;
      strRet=_T("Fish");
      switch(var.vt)
      {
      case VT_EMPTY:
      case VT_NULL:
           strRet=_T("");                       
       break;  case VT_I2:
       strRet.Format(_T("%hd"),V_I2(&var)); 
       break;
      case VT_I4:
       strRet.Format(_T("%d"),V_I4(&var));  
       break;
      case VT_R4:
       strRet.Format(_T("%e"),(double)V_R4(&var));   
       break;
      case VT_R8:
       strRet.Format(_T("%e"),(double)V_R8(&var));      
       break;
      case VT_CY:
       strRet=COleCurrency(var).Format();              
       break;
      case VT_DATE:
       strRet=COleDateTime(var).Format(_T("%m %d %y"));  
       break;
      case VT_BSTR:
       strRet=V_BSTRT(&var);
       break;
      case VT_DISPATCH:
       strRet=_T("VT_DISPATCH");
           break;
      case VT_ERROR:
       strRet=_T("VT_ERROR");
       break;
      case VT_BOOL:
      return strBOOL(V_BOOL(&var));
      case VT_VARIANT:
       strRet=_T("VT_VARIANT");
       break;
      case VT_UNKNOWN:
       strRet=_T("VT_UNKNOWN");
       break;
      case VT_I1:
       strRet=_T("VT_I1");
       break;
      case VT_UI1:
       strRet.Format(_T("0x%02hx"),(unsigned short)V_UI1(&var));
       break;
      case VT_UI2:
        strRet=_T("VT_UI2");
       break;
      case VT_UI4:
        strRet=_T("VT_UI4");
       break;
       case VT_I8:
        strRet=_T("VT_l8");
       break;
       case VT_UI8:
        strRet=_T("VT_UI8");
       break;
       case VT_INT:
        strRet=_T("VT_INT");
       break;
    //**********************************************
        case VT_UINT:
               strRet=_T("VT_UINT");
            break;
    case VT_VOID:
          strRet=_T("VT_VOID");
          break;
    case VT_HRESULT:
         strRet=_T("VT_HRESULT");
          break;
        case VT_PTR:
          strRet=_T("VT_PTR");
          break;
    case VT_SAFEARRAY:
         strRet=_T("VT_SAFEARRAY");
         break;
        case VT_CARRAY:
              strRet=_T("VT_CARRAY");
             break;
        case VT_USERDEFINED:
             strRet=_T("VT_USERDEFINED");
              break;
    case VT_LPSTR:
             strRet=_T("VT_LPSTR");
            break;
        case VT_LPWSTR:
            strRet=_T("VT_LPWSTR");
            break;
    case VT_FILETIME:
          strRet=_T("VT_FILETIME");
          break;
        case VT_BLOB:
          strRet=_T("VT_BLOB");
          break;
        case VT_STREAM:
          strRet=_T("VT_STREAM");
          break;
    case VT_STORAGE:
          strRet=_T("VT_STORAGE");
          break;
       case VT_STREAMED_OBJECT:
          strRet=_T("VT_STREAMED_OBJECT");
          break;
    case VT_STORED_OBJECT:
          strRet=_T("VT_STORED_OBJECT");
          break;
        case VT_BLOB_OBJECT:
          strRet=_T("VT_BLOB_OBJECT");
          break;
    case VT_CF:
          strRet=_T("VT_CF");
          break;
    case VT_CLSID:
         strRet=_T("VT_CLSID");
         break;

      }
      WORD vt=var.vt;
      if(vt&VT_ARRAY)
      {
      vt=vt&~VT_ARRAY;
          strRet=_T("Array of"); 
      }
     if(vt&VT_BYREF)
      {
      vt=vt&~VT_BYREF;
          strRet=_T("Pointer to"); 
      }
      if(vt!=var.vt)
      {
      switch(vt)
      {
      case VT_EMPTY:
       strRet+=_T("VT_EMPTY");
       break;
      case VT_NULL:
       strRet+=_T("VT_NULL");
       break;
      case VT_I2:
       strRet+=_T("VT_I2");
       break;
      case VT_I4:
       strRet+=_T("VT_I4");
       break;
      case VT_R4:
       strRet+=_T("VT_R4");
       break;
          case VT_R8:
       strRet+=_T("VT_R8");
       break;
      case VT_CY:
       strRet+=_T("VT_CY");
       break;
      case VT_DATE:
       strRet+=_T("VT_DATE");
       break;
      case VT_BSTR:
       strRet+=_T("VT_BSTR");
       break;
      case VT_DISPATCH:
       strRet+=_T("VT_DISPATCH");
       break;
      case VT_ERROR:
       strRet+=_T("VT_ERROR");
       break;
      case VT_BOOL:
       strRet+=_T("VT_BOOL");
       break;
       case VT_VARIANT:
       strRet+=_T("VT_VARIANT");
       case VT_UNKNOWN:
       strRet+=_T("VT_UNKNOWN");
       break;    case VT_I1:
       strRet+=_T("VT_I1");
       break;
          case VT_UI1:
            strRet+=_T("VT_UI1");
    break;
          case VT_UI2:
           strRet+=_T("VT_UI2");
           break;
          case VT_UI4:
           strRet+=_T("VT_UI4");
           break;
          case VT_I8:
           strRet+=_T("VT_l8");
           break;
          case VT_UI8:
           strRet+=_T("VT_UI8");
           break;
          case VT_INT:
           strRet+=_T("VT_INT");
           break;
    //**********************************************
           case VT_UINT:
                strRet+=_T("VT_UINT");
             break;
           case VT_VOID:
            strRet+=_T("VT_VOID");
            break;
       case VT_HRESULT:
            strRet+=_T("VT_HRESULT");
            break;
           case VT_PTR:
            strRet+=_T("VT_PTR");
            break;
       case VT_SAFEARRAY:
            strRet+=_T("VT_SAFEARRAY");
            break;
           case VT_CARRAY:
              strRet+=_T("VT_CARRAY");
             break;
            case VT_USERDEFINED:
             strRet+=_T("VT_USERDEFINED");
              break;
        case VT_LPSTR:
              strRet+=_T("VT_LPSTR");
             break;
            case VT_LPWSTR:
             strRet+=_T("VT_LPWSTR");
             break;
           case  VT_FILETIME:
             strRet+=_T("VT_FILETIME");
             break;
           case  VT_BLOB:
             strRet+=_T("VT_BLOB");
             break;
           case  VT_STREAM:
             strRet+=_T("VT_STREAM");
             break;
       case  VT_STORAGE:
             strRet+=_T("VT_STORAGE");
             break;
          case  VT_STREAMED_OBJECT:
             strRet+=_T("VT_STREAMED_OBJECT");
             break;
       case VT_STORED_OBJECT:
            strRet+=_T("VT_STORED_OBJECT");
            break;
          case  VT_BLOB_OBJECT:
            strRet+=_T("VT_BLOB_OBJECT");
            break;
          case VT_CF:
             strRet+=_T("VT_CF");
             break;
        case VT_CLSID:
           strRet+=_T("VT_CLSID");
           break;
      }
      }
    return strRet;
    }
      

  3.   

    #include <stdlib.h>
     //字段类型的转换
    LPCTSTR CCrack::strFiledType(short sType)
    {
    switch(sType)
    {
       case(dbBoolean):
         return _T("BOOL");
           case(dbByte):
         return _T("Byte");
           case(dbInteger):
         return _T("Integer");
           case(dbLong):
         return _T("Long");
       case(dbCurrency):
         return _T("Currency");
       case(dbSingle):
         return _T("float");
       case(dbDouble):
         return _T("Double");
       case(dbDate):
         return _T("Date");
       case(dbText):
         return _T("Text");
       case(dbLongBinary):
         return _T("Long Binary");
           case(dbMemo):
         return _T("Memo");
           case(dbGUID):
         return _T("GUID");
    } return _T("UnKnown");
    } //查询类型的转换LPCTSTR CCrack::strQueryDefType(short sType)
    {
    switch(sType)
    {
    case(dbQSelect):
    return _T("Select");
        case(dbQAction):
    return _T("Action");
        case(dbQCrosstab):
    return _T("Crosstab");
    case(dbQDelete):
    return _T("Delete");
    case(dbQUpdate):
    return _T("Update");
    case(dbQAppend):
    return _T("Append");
    case(dbQMakeTable):
    return _T("MakeTable");
        case(dbQDDL):
    return _T("DDL");
    case(dbQSQLPassThrough):
          return _T("SQLPassThrough");
    case(dbQSetOperation):
    return _T("Set Operation");
    case(dbQSPTBulk):
    return _T("SPTBulk");
    }
    return _T("UnKnown");
    }//BOOL值的转换
    LPCTSTR CCrack::strBOOL(BOOL bFlag)
    {
    return bFlag ?_T("TRUE"):_T("FALSE");
    }
      

  4.   

    CString CMshtmlDialog::GetReturnString() {     ASSERT(m_varReturn.vt == VT_BSTR);    CString str = m_varReturn.bstrVal;    return str;   } 
      

  5.   

    HRESULT CSimpleMsgBoxImpl::DoSimpleMsgBox ( HWND hwndParent, BSTR bsMessageText )
    {
     _bstr_t bsMsg = bsMessageText;
    LPCTSTR szMsg = (TCHAR*) bsMsg;   // 如果需要的话,用_bstr_t将串转换为ANSI 
    做完转换的工作后,显示信息框,然后返回。
        MessageBox ( hwndParent, szMsg, _T("Simple Message Box"), MB_OK );
        return S_OK;
    }
      

  6.   

    太麻烦了吧。VARIANT varA;
    //...
    CComVariant var(varA);
    var.ChagneType(VT_BSTR);USES_CONVERSION;
    CString str(OLE2CT(var.bstrVal));
      

  7.   

    CString CMyView::VariantToCString(VARIANT var)
    {
    CString strValue;
    _variant_t var_t;
    COleDateTime time_value;
    COleCurrency var_currency;
    switch(var.vt)
    {
    case VT_EMPTY:
    strValue = _T(""); 
    break;
    case VT_UI1:
    strValue.Format("%d",var.bVal);
    break;
    case VT_I2:
    strValue.Format("%d",var.iVal);
    break;
    case VT_I4:
    strValue.Format("%d",var.lVal);
    break;
    case VT_R4:
    strValue.Format("%f",var.fltVal);
    break;
    case VT_R8:
    strValue.Format("%f",var.dblVal);
    break;
    case VT_CY:
    var_currency = var;
    strValue = var_currency.Format(0);
    break;
    case VT_BSTR:
    var_t = var;
    strValue.Format("%s",(const char *)(_bstr_t)var_t);
    break;
    case VT_NULL: strValue=_T("");
    break;
    case VT_DATE:
    time_value = var.date;
    strValue = time_value.Format("%H:%m,%A,%B %d,%Y");
    break;
    case VT_BOOL:
    strValue.Format("%d",var.boolVal);
    break;
    default:
    strValue = _T("");
    break;
    }
    return strValue;
    }