ATL字符串类型转换

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 转换宏使用栈作为临时空间,这句定义必须加在函数体内。

你可能感兴趣的:(ATL字符串类型转换)