大家在使用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*类型。