需要依据不同情况判断,这里有一个 format 到cstring的,然后cstring与文本关联吧
http://blog.csdn.net/kilvdn/article/details/2107459

解决方案 »

  1.   

    这里没用到 VARIANT的封装_variant_t,只是想把接收到得数据在编辑框中显示,而接收的数据是VARIANT类的,所以想用一个转换,可是生成exe文件后却不能实现读和取,所以想请各位高手指点一下。
      

  2.   

    /*########################################################################
      ------------------------------------------------
        数值类型转换
      ------------------------------------------------
      ########################################################################*/
    COleDateTime vartodate(const _variant_t& var)
    {
    COleDateTime value;
    switch (var.vt) 
    {
    case VT_DATE:
    {
    value = var.date;
    }
    break;
    case VT_EMPTY:
    case VT_NULL:
    value.SetStatus(COleDateTime::null);
    break;
    default:
    value.SetStatus(COleDateTime::null);
    TRACE(_T("Warning: 未处理的 _variant_t 类型值; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
    }
    return value;
    }COleCurrency vartocy(const _variant_t& var)
    {
    COleCurrency value;
    switch (var.vt) 
    {
    case VT_CY:
    value = (CURRENCY)var.cyVal;
    break;
    case VT_EMPTY:
    case VT_NULL:
    value.m_status = COleCurrency::null;
    break;
    default:
    value.m_status = COleCurrency::null;
    TRACE(_T("Warning: 未处理的 _variant_t 类型值; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
    }
    return value;
    }bool vartobool(const _variant_t& var)
    {
    bool value = false;
    switch (var.vt)
    {
    case VT_BOOL:
    value = var.boolVal ? true : false;
    case VT_EMPTY:
    case VT_NULL:
    break;
    default:
    TRACE(_T("Warning: 未处理的 _variant_t 类型值; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
    }
    return value;
    }BYTE vartoby(const _variant_t& var)
    {
    BYTE value = 0;
    switch (var.vt)
    {
    case VT_I1:
    case VT_UI1:
    value = var.bVal;
    break;
    case VT_NULL:
    case VT_EMPTY:
    value = 0;
    break;
    default:
    TRACE(_T("Warning: 未处理的 _variant_t 类型值; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
    }
    return value;
    }short vartoi(const _variant_t& var)
    {
    short value = 0;
    switch (var.vt)
    {
    case VT_BOOL:
    value = var.boolVal;
    break;
    case VT_UI1:
    case VT_I1:
    value = var.bVal;
    break;
    case VT_I2:
    case VT_UI2:
    value = var.iVal;
    break;
    case VT_NULL:
    case VT_EMPTY:
    value = 0;
    break;
    default:
    TRACE(_T("Warning: 未处理的 _variant_t 类型值; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
    }
    return value;
    }long vartol(const _variant_t& var)
    {
    long value = 0;
    switch (var.vt)
    {
    case VT_BOOL:
    value = var.boolVal;
    break;
    case VT_UI1:
    case VT_I1:
    value = var.bVal;
    break;
    case VT_UI2:
    case VT_I2:
    value = var.iVal;
    break;
    case VT_I4:
    case VT_UI4:
    value = var.lVal;
    break;
    case VT_INT:
    value = var.intVal;
    break;
    case VT_R4:
    value = (long)(var.fltVal + 0.5);
    break;
    case VT_R8:
    value = (long)(var.dblVal + 0.5);
    break;
    case VT_DECIMAL:
    value = (long)var;
    break;
    case VT_CY:
    value = (long)var;
    break;
    case VT_BSTR://字符串
    case VT_LPSTR://字符串
    case VT_LPWSTR://字符串
    value = atol((LPCTSTR)(_bstr_t)var);
    break;
    case VT_NULL:
    case VT_EMPTY:
    value = 0;
    break;
    default:
    TRACE(_T("Warning: 未处理的 _variant_t 类型值; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
    }
    return value;
    }double vartof(const _variant_t& var)
    {
    double value = 0;
    switch (var.vt)
    {
    case VT_R4:
    value = var.fltVal;
    break;
    case VT_R8:
    value = var.dblVal;
    break;
    case VT_DECIMAL:
    value = (double)var;
    break;
    case VT_CY:
    value = (double)var;
    break;
    case VT_BOOL:
    value = var.boolVal;
    break;
    case VT_UI1:
    case VT_I1:
    value = var.bVal;
    break;
    case VT_UI2:
    case VT_I2:
    value = var.iVal;
    break;
    case VT_UI4:
    case VT_I4:
    value = var.lVal;
    break;
    case VT_INT:
    value = var.intVal;
    break;
    case VT_BSTR://字符串
    case VT_LPSTR://字符串
    case VT_LPWSTR://字符串
    value = atof((LPCTSTR)(_bstr_t)var);
    break;
    case VT_NULL:
    case VT_EMPTY:
    value = 0;
    break;
    default:
    value = 0;
    TRACE(_T("Warning: 未处理的 _variant_t 类型值; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
    }
    return value;
    }CString vartostr(const _variant_t &var)
    {
    CString strValue;

    switch (var.vt)
    {
    case VT_BSTR://字符串
    case VT_LPSTR://字符串
    case VT_LPWSTR://字符串
    strValue = (LPCTSTR)(_bstr_t)var;
    break;
    case VT_I1:
    case VT_UI1:
    strValue.Format("%d", var.bVal);
    break;
    case VT_I2://短整型
    strValue.Format("%d", var.iVal);
    break;
    case VT_UI2://无符号短整型
    strValue.Format("%d", var.uiVal);
    break;
    case VT_INT://整型
    strValue.Format("%d", var.intVal);
    break;
    case VT_I4: //整型
    strValue.Format("%d", var.lVal);
    break;
    case VT_I8: //长整型
    strValue.Format("%d", var.lVal);
    break;
    case VT_UINT://无符号整型
    strValue.Format("%d", var.uintVal);
    break;
    case VT_UI4: //无符号整型
    strValue.Format("%d", var.ulVal);
    break;
    case VT_UI8: //无符号长整型
    strValue.Format("%d", var.ulVal);
    break;
    case VT_VOID:
    strValue.Format("%8x", var.byref);
    break;
    case VT_R4://浮点型
    strValue.Format("%.4f", var.fltVal);
    break;
    case VT_R8://双精度型
    strValue.Format("%.8f", var.dblVal);
    break;
    case VT_DECIMAL: //小数
    strValue.Format("%.8f", (double)var);
    break;
    case VT_CY:
    {
    COleCurrency cy = var.cyVal;
    //strValue = cy.Format();
    strValue = cy.Format(0, MAKELCID(MAKELANGID(LANG_CHINESE,
    SUBLANG_CHINESE_SINGAPORE), SORT_DEFAULT));
    }
    break;
    case VT_BLOB:
    case VT_BLOB_OBJECT:
    case 0x2011:
    strValue = "[BLOB]";
    break;
    case VT_BOOL://布尔型 strValue = var.boolVal ? "TRUE" : "FALSE";
    break;
    case VT_DATE: //日期型
    {
    DATE dt = var.date;
    COleDateTime da = COleDateTime(dt); 
    strValue = da.Format("%Y-%m-%d %H:%M:%S");
    }
    break;
    case VT_NULL://NULL值
    strValue = "";
    break;
    case VT_EMPTY://空
    strValue = "";
    break;
    case VT_UNKNOWN://未知类型
    default:
    strValue = "UN_KNOW";
    break;
    }
    return strValue;
    }
      

  3.   

    没看到CString vartostr(const _variant_t &var)这个函数?
    传进var返回CString...
      

  4.   

    那么如何将char转化为COleVariant型呢
      

  5.   


    回去吃饭吧.知道了怎么来不知道怎么去...
    CString vartostr(const _variant_t &var)
    {    
       CString strValue;         
       switch (var.vt)    
       {    
       case VT_BSTR://字符串    
        case VT_LPSTR://字符串    
        case VT_LPWSTR://字符串        
        strValue = (LPCTSTR)(_bstr_t)var;
    //var.vt = VT_LPSTR; var = char*...  !!!