CString s;
s=(LPCTSTR)(_bstr_t)rs->GetCollect("Name");
但发生错误,中断在atlsimpstr.h里的这里,
        int GetLength() const throw()
{
return( GetData()->nDataLength );
}
我看了很多_variant_t转换CString ,但都要出错,怎么解决呀,我用的VS2008(C++)

解决方案 »

  1.   

    先看rs->GetCollect("Name")是否获取到值
      

  2.   

    http://blog.csdn.net/zyq5945/archive/2010/05/12/5581453.aspx
      

  3.   

    这样,定义一个_variant_t var;
    然后用var去接收获取的数据 var = rs->GetCollect("Name");
    判断:if(var.vt != VT_NULL)
        s=(LPCTSTR)(_bstr_t)var;
      

  4.   

    我看了不行呀,就是VT_BSTR
    strValue = (LPCTSTR)(_bstr_t)var;
    我也是这样写的
    就报这错呀
      

  5.   

    错误是读取位置0Xfffffff0时发生访问冲突
      

  6.   

    我找到错了,我用的是一个结构体,我memset(class,0x00,sizeof(class));
    然后class->name就怎么都赋不过值了,这是为什么呀,哪位大哥能告诉我吧,这样做错在哪里了?
      

  7.   

    不用那样麻烦吧,你把那个strValue = (LPCTSTR)(_bstr_t)var;
    改成strValue = (char*)(_bstr_t)var;这样试试。
      

  8.   

    只要memset(class,0x00,sizeof(class));
    改了也不知,不知道为什么呢
      

  9.   

    这样说吧,memset(class,0x00,sizeof(class));
    后,CString s="xiaoming"
    class->name=s
    都会出错,无语呀,为什么呀
      

  10.   

    我转过 可以
    写了有段时间了
    硬盘坏了 数据没了 什么都没了 杯具
    记不太清了
    好象是(LPWSTR)(LPCTSTR)(_bstr_t)
    明天试试在给你回复
    俺现在也是重写啊
      

  11.   

    写个函数将Variant转换成CString
      

  12.   

    给个参考,我用ADO操作ACCESS的时候,用的CString VariantToString(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: //整型
    case VT_I8: //长整型
    strValue.Format("%d", var.lVal);
    break;

    case VT_UINT://无符号整型
    strValue.Format("%d", var.uintVal);
    break;

    case VT_UI4: //无符号整型
    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();
    }
    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值
    case VT_EMPTY://空
    strValue = "";
    break;

    case VT_UNKNOWN://未知类型
    default:
    strValue = "UN_KNOW";
    break;
    }
    return strValue;
    }
      

  13.   

    s = (LPCTSTR)_bstr_t(pRS->GetCollect("nmae"));