如果将BSTR里的数据显示出来? 一个BSTR的变量,每次显示它的内容到一个文本框里都是乱码,查资料说里面存的是Unicode的编码,我如何将它里面的内容正常的显示成一个字符串或者是一个长整形的数字呢?因为我知道里面存的数据应该是一个6位的整数。如有知道的,请帮帮忙,先谢谢大家了。! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BSTR bstr = SysAllocString(L"测试");USES_CONVERSION;TCHAR *psz = W2T(bstr);::MessageBox(NULL, psz, _T("Test"), MB_OK); 我按你的方法是这样的。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;}但是输出来时全是乱码。也不完全是乱码,反正 []里输出的都是奇怪的中文,还有?号 /杆 那些我要输出里面的数字或者英文字符该怎么弄啊?谢谢了! 首先看看你的vc设置,如果是unicode的,BSTR bstr = SysAllocString(L"测试");CComBSTR s=bstr;::MessageBox(NULL, psz, s,MB_OK);应该是可以的。如果不是unicode的,用宏转换到char得数组。直接用char[100];好像W2A就行了。此外,对于bstr最好用CComBSTR,因为不用考虑内存的问题,还有点字符串操作的方法。 你说的看VC设置是看哪里? 怎么用W2A转换还有CComBSTR怎么用?我对这些都不熟悉,可不可以说详细点呢?最好给点示例,谢谢了! BSTR bstr = SysAllocString(L"测试"); CComBSTR s=bstr; ::MessageBox(NULL, s, s,MB_OK); 上面这个我可以正常显示出来。但我将我自己的代码 中一个 传进函数的 *BSTR变量,按TCHAR *tmpbstr = W2T(*Value);转换后,用%d 显示多次数据是一样的,用SetDlgItemText 显示每次都是显示不同的中文。是怎么回事呢? 用UNICODE的API函数确定下你的输入。::MessageBoxW(NULL, *Value, NULL,MB_OK); bstr先转成CString在处理就可以了 我都试过无数种转法了,还是不行啊。比如:CString ss=_com_util::ConvertBSTRToString(bstr);USES_CONVERSION char * pp=W2A(bstr );CString aa = (LPCTSTR)bstr这些都试过了,还是一样的,前面几个问号,后面乱码。 那唯一的可能就是你传入的BSTR就有问题,不是中文格式。 MessageBox(NULL,string(_bstr_t(BSTR字符串)).c_str(), _T("Test"), MB_OK) BSTR b;char *a = NULL;a = _com_util::ConvertBSTRToString(b); error C2228: left of '.c_str' must have class/struct/unionerror C3861: 'string': identifier not found这是怎么回事呢?没包含头文件? ::MessageBoxA(NULL,string(_bstr_t(BSTR字符串)).c_str(), "Test", MB_OK)msdn可以查到std string包含<string>命名空间 std_bstr_t 需要头comutil.h2005库为comsuppw.libvc6库为comsupp.lib error C2065: 'string' : undeclared identifier 上面这个解决了用的: std:string 但这个:error C2228: left of '.c_str' must have class/struct/union 前面加using namespace std;或者用std::string 系统提供了的,定义个 _variant_t vtValue;,然后赋值给这个,顶一个字符串或者数组,vtValue.bstrVal; C++编程 求助?哪位高手帮帮忙 USB硬盘的插入和移除 子线程怎么传消息给主线程啊? 如何生成多节点xml文件 (天津)去了好几个招聘会竟然没有要MIS的程序员!请教各位天津哪里的招聘会比较好?各位帮帮忙谢了 求大家的网络测试数据 请各位大神帮忙 给点建议! 第一次用这样的东西 关于书签的问题!! 浏览器 CHtmlView 求个方案
USES_CONVERSION;
TCHAR *psz = W2T(bstr);
::MessageBox(NULL, psz, _T("Test"), MB_OK);
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;
}但是输出来时全是乱码。也不完全是乱码,反正 []里输出的都是奇怪的中文,还有?号 /杆 那些我要输出里面的数字或者英文字符该怎么弄啊?谢谢了!
BSTR bstr = SysAllocString(L"测试");
CComBSTR s=bstr;
::MessageBox(NULL, psz, s,MB_OK);
应该是可以的。
如果不是unicode的,
用宏转换到char得数组。
直接用char[100];
好像W2A就行了。
此外,对于bstr最好用CComBSTR,因为不用考虑内存的问题,还有点字符串操作的方法。
我对这些都不熟悉,可不可以说详细点呢?最好给点示例,谢谢了!
CComBSTR s=bstr;
::MessageBox(NULL, s, s,MB_OK);
上面这个我可以正常显示出来。但我将我自己的代码 中一个 传进函数的 *BSTR变量,
按TCHAR *tmpbstr = W2T(*Value);
转换后,用%d 显示多次数据是一样的,用SetDlgItemText 显示每次都是显示不同的中文。是怎么回事呢?
::MessageBoxW(NULL, *Value, NULL,MB_OK);
CString ss=_com_util::ConvertBSTRToString(bstr);USES_CONVERSION
char * pp=W2A(bstr );CString aa = (LPCTSTR)bstr
这些都试过了,还是一样的,前面几个问号,后面乱码。
那唯一的可能就是你传入的BSTR就有问题,不是中文格式。
char *a = NULL;
a = _com_util::ConvertBSTRToString(b);
error C2228: left of '.c_str' must have class/struct/union
error C3861: 'string': identifier not found
这是怎么回事呢?没包含头文件?
std string
包含<string>
命名空间 std_bstr_t 需要头comutil.h
2005库为comsuppw.lib
vc6库为comsupp.lib
error C2065: 'string' : undeclared identifier
using namespace std;
或者用
std::string
vtValue.bstrVal;