ATL提供了一些字符串转换宏,必要时它们在前面描述的各种字符类型之间进行转换。当编译选项使得源
字符类型与目标字符类型相同时,这些宏并不执行转换,事实上什么也没干。
宏的名字使用了各种字符数据类型的缩写:
T表示指向Win32 TCHAR字符数据类型的指针---LPTSTR参数
W表示指向Unicode wchar_t字符数据类型的指针---LPWSTR参数
A表示指向Win32 TCHAR字符数据类型的指针---LPSTR参数
OLE表示指向Win32 TCHAR字符数据类型的指针---LPOLESTR参数
C表示C/C++中的const修饰符
所有宏的名字使用"<源类型缩写>2<目标类型缩写>"的形式;例如,A2W宏把一个LPSTR转换成一个LPWSTR。
当宏的名字中出现C时,那么在它后面的类型缩写前面加上const修饰符;例如,宏T2COLE把LPTSTR转换成
LPCOLESTR。
宏的真正行为依赖于我们定义的预处理器符号,下面列出了ATL字符串转换宏:
字符集预处理器符号
----------------------------------------------------------------------
定义的预处理器符号 T成为 OLE成为
----------------------------------------------------------------------
None A W
_UNICODE W W
OLE2ANSI A A
_UNICODE和OLE2ANSI W A
----------------------------------------------------------------------
ATL字符串转换宏
------------------------------------------------------------------------------------
A2BSTR A2W OLE2CW T2COLE W2CA
A2COLE A2WBSTR OLE2T T2CW W2COLE
A2CT OLE2A OLE2W T2OLE W2CT
A2CW OLE2BSTR T2A T2W W2OLE
A2OLE OLE2CA T2BSTR W2A W2T
A2T OLE2CT T2CA W2BSTR
------------------------------------------------------------------------------------
所有的宏接受一个指向源字符集中字符串的指针作为参数。每个宏的行为像一个函数调用,它们会返回
一个指向目标字符中字符串的指针。当源字符集和目标字符集相同时,宏只是把指定的参数作为目标返
回。
转换宏使用了局部变量。我们必须在使用转换宏的函数开始处指定宏USES_CONVERSION(只需一次),以便
分配这些变量。