大家知道,COM是一种规范,里面的字符串用的是宽字节字符集,它是一套双字节字符集。如何将BSTR转换成MFC的CString呢?
(1)将BSTR变量转换成_bstr_t类,如下
BSTR Cat = NULL;
Cat = SysAllocString(L("My Text!"));
_bstr_t ret = (_bstr_t)Cat;
(2)将_bstr_t转换成CString,如下
CString str;
str = (LPCSTR)ret;
这样就OK了。如果直接将BSTR转换成CString类型,有的人这样做:
BSTR bstr;
CString strSql;
CString 转换 BSTR:
bstr = strSql.AllocSysString(); //可以
BSTR 转换CString:
strSql = (LPCSTR)bstr;//会出问题
原因是BSTR是一个指针,对于C++,Windows头文件wtypes.h中定义如下:
typedef wchar_t WCHAR;
typedef WCHAR OLECHAR;
typedef OLECHAR __RPC_FAR *BSTR;