你們在使用ATL技術作項目時,必定發現了很是麻煩的字符串字符集問題,下面把經常使用點和重點記錄羅列一下,以備查。編程
ATL提供了許多字符串轉換函數,若是編譯選項使得源和目的的字符類型相同,那麼這些類不執行任何轉換,關於設置系統編譯項的問題前面windows編程的文章中已經介紹過。若是要使用ATL的字符轉換類,那麼必需要包含<atlconv.h>文件,轉換的具體方式均是經過宏定義(宏函數)來完成,爲了更好的列出這些宏函數及明確其功能,須要先說明一下都有哪些字符串類型以及他們的縮寫形式:windows
T表示一個指向Win32的TCHAR字符的指針----一個LPTSTR參數。ide
W表示一個指向Unicode的wchar_t字符的指針----一個LPWSTR參數。函數
A表示一個指向MBCS/ANSI的char字符的指針----一個LPSTR參數。操作系統
OLE表示一個指向COM OLECHAR字符的指針----一個LPOLESTR參數。指針
C表示C/C++的const修飾符。code
全部宏函數的名稱都採用統一的「<源格式縮寫>2<目標縮寫>」形式,其中「2」取其英文讀音「TO」,即,從源到目標。好比,A2W就是把LPSTR轉換爲LPWSTR,若是名稱中含有C,就表明const,好比,T2CW就是把LPTSTR轉爲LPCWSTR。下面列出ATL的字符轉換宏列表接口
A2W OLE2T T2CA T2W W2T字符串
A2WEX OLE2TEX T2CAEX T2WEX W2TEXit
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*類型。