代码:
...
BSTR bstrVal;
CString strArg1 = bstrVal;
...
编译错误:
error C2440: 'initializing' : cannot convert from 'BSTR' to 'ATL::CStringT<BaseType,StringTraits>'
with
[
BaseType=char,
StringTraits=StrTraitMFC<char>
]
Constructor for class 'ATL::CStringT<BaseType,StringTraits>' is declared 'explicit'
with
[
BaseType=char,
StringTraits=StrTraitMFC<char>
]
1、在工程已经设置为《multi-byte character》的情况下出现这个错误,但是CString strArg1(bstrVal);这样写,又不会报错,为什么?工程设置为unicode,则没有错误。
2、有人说应该用MultiByteToWideChar, WideCharToMultiByte把bstrVal转掉。但是如果直接CString strArg1(bstrVal);这样写,会有问题吗?
3、还有,可能是这个工程错误的设置了什么属性,因为我把代码提取出来新建一个工程,就不会有这样的错误。
网上关于字符集问题的帖子看了挺多了,但是没找到这个问题的原因
6 个解决方案
#1
BSTR bstrVal;
//CString strArg1 = bstrVal;
strArg1.SetSysString(&bstrVal);
#3
下班了,顶
#4
出现异常
#5
_bstr_t 试试看
#6
楼主的意思是:
为什么
_tchar str="...";
CString strArg1 = str; 正确,
而
BSTR bstrVal;
CString strArg1 = bstrVal;
就出错了。
原因是从内存结构上看,BSTR与wchar_t是完全相同的,但在编译器看来,BSTR与wchar_t是两种不同的类型。
CString有到wchar_t的赋值函数(定义大约为CString &operater=(LPCTSTR);),却没有到BSTR的赋值函数。
可以直接用CString strArg1 = (LPCWSTR)bstrVal;来解决。
为什么
_tchar str="...";
CString strArg1 = str; 正确,
而
BSTR bstrVal;
CString strArg1 = bstrVal;
就出错了。
原因是从内存结构上看,BSTR与wchar_t是完全相同的,但在编译器看来,BSTR与wchar_t是两种不同的类型。
CString有到wchar_t的赋值函数(定义大约为CString &operater=(LPCTSTR);),却没有到BSTR的赋值函数。
可以直接用CString strArg1 = (LPCWSTR)bstrVal;来解决。
#1
BSTR bstrVal;
//CString strArg1 = bstrVal;
strArg1.SetSysString(&bstrVal);
#2
CString与BSTR之间的转换
http://hi.baidu.com/wobash/blog/item/3e2173525df31b0b0df3e3ca.html
http://hi.baidu.com/wobash/blog/item/3e2173525df31b0b0df3e3ca.html
#3
下班了,顶
#4
出现异常
#5
_bstr_t 试试看
#6
楼主的意思是:
为什么
_tchar str="...";
CString strArg1 = str; 正确,
而
BSTR bstrVal;
CString strArg1 = bstrVal;
就出错了。
原因是从内存结构上看,BSTR与wchar_t是完全相同的,但在编译器看来,BSTR与wchar_t是两种不同的类型。
CString有到wchar_t的赋值函数(定义大约为CString &operater=(LPCTSTR);),却没有到BSTR的赋值函数。
可以直接用CString strArg1 = (LPCWSTR)bstrVal;来解决。
为什么
_tchar str="...";
CString strArg1 = str; 正确,
而
BSTR bstrVal;
CString strArg1 = bstrVal;
就出错了。
原因是从内存结构上看,BSTR与wchar_t是完全相同的,但在编译器看来,BSTR与wchar_t是两种不同的类型。
CString有到wchar_t的赋值函数(定义大约为CString &operater=(LPCTSTR);),却没有到BSTR的赋值函数。
可以直接用CString strArg1 = (LPCWSTR)bstrVal;来解决。