ATL提供了宏来进行unicode和MBCS字符串之间的转换,
ATL 提供的转换宏。
A2BSTR | OLE2A | T2A | W2A |
A2COLE | OLE2BSTR | T2BSTR | W2BSTR |
A2CT | OLE2CA | T2CA | W2CA |
A2CW | OLE2CT | T2COLE | W2COLE |
A2OLE | OLE2CW | T2CW | W2CT |
A2T | OLE2T | T2OLE | W2OLE |
A2W | OLE2W | T2W | W2T |
使用这些宏的时候还要注意宏 USES_CONVERSION; 的使用,
在调用宏进行转换的函数开头,要加上一句代码
USES_CONVERSION;
不然会有编译错误产生,错误信息如下:
: error C2065: '_lpw' : undeclared identifier
: error C2065: '_convert' : undeclared identifier
: error C2065: '_acp' : undeclared identifier
: error C3861: '_lpw': identifier not found, even with argument-dependent lookup
: error C3861: '_convert': identifier not found, even with argument-dependent lookup
: error C3861: '_lpw': identifier not found, even with argument-dependent lookup
: error C3861: '_convert': identifier not found, even with argument-dependent lookup
为什么会产生这些错误呢?看一下这个宏的定义就了解了:P
#ifndef _DEBUG
#define USES_CONVERSION int _convert; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw; (_lpw); LPCSTR _lpa; (_lpa)
#else
#define USES_CONVERSION int _convert = 0; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw = NULL; (_lpw); LPCSTR _lpa = NULL; (_lpa)
#endif
这个宏定义了几个要在转换宏中使用的参数,因此没有它,编译错误就产生了。
由于 ATL 转换宏使用栈作为临时空间,这句定义必须加在函数体内。
转自:http://blog.csdn.net/liuyangak/article/details/7023782