看流星社区

 找回密码
 注册账号
查看: 1577|回复: 0

谈ATL(一)说说ATL字符串转换类

[复制链接]

该用户从未签到

发表于 2014-6-15 09:50:48 | 显示全部楼层 |阅读模式
最近因为项目的原因必须要使用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*类型。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-29 07:35

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表