大家在使用ATL技术做项目时,一定发现了非常麻烦的字符串字符集问题,下面把常用点和重点记录罗列一下,以备查。
ATL提供了许多字符串转换函数,如果编译选项使得源和目的的字符类型相同,那么这些类不执行任何转换,关于设置系统编译项的问题前面windows编程的文章中已经介绍过。如果要使用ATL的字符转换类,那么必须要包含<atlconv.h>文件,转换的具体方式均是通过宏定义(宏函数)来完成,为了更好的列出这些宏函数及明确其功能,需要先说明一下都有哪些字符串类型以及他们的缩写形式:
T表示一个指向Win32的TCHAR字符的指针----一个LPTSTR参数。
W表示一个指向Unicode的wchar_t字符的指针----一个LPWSTR参数。
A表示一个指向MBCS/ANSI的char字符的指针----一个LPSTR参数。
OLE表示一个指向COM OLECHAR字符的指针----一个LPOLESTR参数。
C表示C/C++的const修饰符。
所有宏函数的名称都采用统一的“<源格式缩写>2<目标缩写>”形式,其中“2”取其英文读音“TO”,即,从源到目标。比如,A2W就是把LPSTR转换为LPWSTR,如果名称中含有C,就代表const,比如,T2CW就是把LPTSTR转为LPCWSTR。下面列出ATL的字符转换宏列表
A2W OLE2T T2CA T2W W2T
A2WEX OLE2TEX T2CAEX T2WEX W2TEX
A2T OLE2CT T2OLE T2CW W2CT
A2TEX OLE2CTEX T2OLEEX T2CWEX W2CTEX
A2CT T2A T2COLE W2A
A2CTEX T2AEX T2COLEEX W2AEX
需要特殊说明的字符集是OLECHAR,在Unicode的情况下,OLE等同于W,例如:COLE2T和CW2T是等同的。
这与OLECHAR的定义是分不开的,在win16的windows操作系统上,OLECHAR是由包含ANSI字符的标准C数据类型char用typedef定义得到的,而在win32的系统上,则是由wchar_t数据类型用typedef定义得到的。因为OLECHAR的自适应性,通常,把所有的COM接口字符串参数定义为OLECHAR*类型。
本文出自 “8403723” 博客,请务必保留此出处http://8413723.blog.51cto.com/8403723/1729777
原文地址:http://8413723.blog.51cto.com/8403723/1729777