一个BSTR的变量,每次显示它的内容到一个文本框里都是乱码,查资料说里面存的是Unicode的编码,我如何将它里面的内容正常的显示成一个字符串或者是一个长整形的数字呢?因为我知道里面存的数据应该是一个6位的整数。
如有知道的,请帮帮忙,先谢谢大家了。!

解决方案 »

  1.   

    BSTR bstr = SysAllocString(L"测试");
    USES_CONVERSION;
    TCHAR *psz = W2T(bstr);
    ::MessageBox(NULL, psz, _T("Test"), MB_OK);
      

  2.   

    我按你的方法是这样的。
    HRESULT CTestUsbDataDlg::OnPacketArrived(unsigned char* BaseStation, long* DataTag, BSTR* Value, unsigned char* Status, short* RSSI, short* CV, VARIANT_BOOL* BattLow, VARIANT_BOOL * Error)
    {
    TCHAR *tmpbstr = W2T(*Value); CString strMsg;
    strMsg.Format(_T("Tag:%X  [%s]"), *DataTag,tmpbstr/*(TCHAR*)_bstr_t(*Value)(LPCTSTR)_bstr_t(*Value)*/, false);
    ((CListBox*)GetDlgItem(IDC_LIST))->AddString(strMsg); 
    return S_OK;
    }但是输出来时全是乱码。也不完全是乱码,反正 []里输出的都是奇怪的中文,还有?号 /杆 那些我要输出里面的数字或者英文字符该怎么弄啊?谢谢了!
      

  3.   

    首先看看你的vc设置,如果是unicode的,
    BSTR bstr = SysAllocString(L"测试");
    CComBSTR s=bstr;
    ::MessageBox(NULL, psz, s,MB_OK);
    应该是可以的。
    如果不是unicode的,
    用宏转换到char得数组。
    直接用char[100];
    好像W2A就行了。
    此外,对于bstr最好用CComBSTR,因为不用考虑内存的问题,还有点字符串操作的方法。
      

  4.   

    你说的看VC设置是看哪里? 怎么用W2A转换还有CComBSTR怎么用?
    我对这些都不熟悉,可不可以说详细点呢?最好给点示例,谢谢了!
      

  5.   

    BSTR bstr = SysAllocString(L"测试"); 
    CComBSTR s=bstr; 
    ::MessageBox(NULL, s, s,MB_OK); 
    上面这个我可以正常显示出来。但我将我自己的代码 中一个 传进函数的 *BSTR变量,
    按TCHAR *tmpbstr = W2T(*Value);
    转换后,用%d 显示多次数据是一样的,用SetDlgItemText 显示每次都是显示不同的中文。是怎么回事呢?
      

  6.   

    用UNICODE的API函数确定下你的输入。
    ::MessageBoxW(NULL, *Value, NULL,MB_OK); 
      

  7.   

    bstr先转成CString在处理就可以了
      

  8.   

    我都试过无数种转法了,还是不行啊。比如:
    CString ss=_com_util::ConvertBSTRToString(bstr);USES_CONVERSION 
    char * pp=W2A(bstr );CString aa = (LPCTSTR)bstr
    这些都试过了,还是一样的,前面几个问号,后面乱码。
      

  9.   


    那唯一的可能就是你传入的BSTR就有问题,不是中文格式。
      

  10.   

    MessageBox(NULL,string(_bstr_t(BSTR字符串)).c_str(), _T("Test"), MB_OK)
      

  11.   

    BSTR b;
    char *a = NULL;
    a = _com_util::ConvertBSTRToString(b);
      

  12.   


    error C2228: left of '.c_str' must have class/struct/union
    error C3861: 'string': identifier not found
    这是怎么回事呢?没包含头文件?
      

  13.   

    ::MessageBoxA(NULL,string(_bstr_t(BSTR字符串)).c_str(), "Test", MB_OK)msdn可以查到
    std string
    包含<string>
    命名空间 std_bstr_t 需要头comutil.h
    2005库为comsuppw.lib
    vc6库为comsupp.lib
      

  14.   


    error C2065: 'string' : undeclared identifier
      

  15.   

    上面这个解决了用的: std:string 但这个:error C2228: left of '.c_str' must have class/struct/union
      

  16.   

    前面加
    using namespace std;
    或者用
    std::string
      

  17.   

    系统提供了的,定义个 _variant_t  vtValue;,然后赋值给这个,顶一个字符串或者数组,
    vtValue.bstrVal;