LPCWSTR是Unicode字符串指針,初始化時(shí)串有多大,申請(qǐng)空間就有多大,以后存儲(chǔ)若超過則出現(xiàn)無法 預(yù)料的結(jié)果,這是它與CString的不同之處。而CString是一個(gè)串類,它會(huì)自動(dòng)管理內(nèi)存空間。LPCWSTR初 始化如下: LPCWSTR Name=L"TestlpCwstr"; 由于LPCWSTR必須指向Unicode的字符串,問題的關(guān)鍵就變成了ANSI字符與Unicode字符之間的轉(zhuǎn)換 了,而ATL中轉(zhuǎn)換宏正好可以實(shí)現(xiàn): //方法一 CString str=_T("TestStr"); USES_CONVERSION; LPWSTR pwStr=new wchar_t[str.GetLength()+1]; wcscpy(pwStr,T2W((LPCTSTR)str)); //方法二 CString str=_T("TestStr"); USES_CONVERSION; LPWCSTR pwcStr=A2CW((LPCSTR)str); MFC中CString和LPSTR可通用,其中A2CW表示(LPCSTR)->(LPCWSTR),USES_CONVERSION 表示 用來定義一些中間變量,在使用ATL轉(zhuǎn)換宏之前必須定義該語(yǔ)句。 此外,要將LPCWSTR轉(zhuǎn)換為CString,那就更容易,因?yàn)長(zhǎng)PCWSTR可以直接用來構(gòu)造CString,例如: LPCWSTR pcwStr=L"TestpwcStr"; CString str(pcwStr); 在<atlconv.h>頭文件中定義了ATL提供的所有轉(zhuǎn)換宏,如下: A2CW (LPCSTR)->(LPCWSTR) A2W (LPCSTR)->(LPWSTR) W2CA (LPCWSTR)->(LPCSTR) W2A (LPCWSTR)->(LPSTR) 其中各字母的含義如下: 2:為to的發(fā)音,表示“轉(zhuǎn)換為”的含義 A:為ANSI字符串,即MBCS W和OLE:為寬字符串,即UNICODE T:為中間類型。如果定義了_UNICODE,則T表示W(wǎng);如果定義了_MBCS,則T表示A C:為const的縮寫 利用這些宏,可以快速的進(jìn)行各種字符間的轉(zhuǎn)換。使用之前必須包含<atlconv.h>頭文件,并且聲明 USES_CONVERSION。使用ATL轉(zhuǎn)換宏,由于不用釋放臨時(shí)空間,所以使用起來非常方便。但考慮到棧空 間的尺寸(VC++默認(rèn)為2M),使用時(shí)需注意以下幾點(diǎn): (1)只適用于進(jìn)行短字符串的轉(zhuǎn)換 (2)不要試圖在一個(gè)次數(shù)比較多的循環(huán)體內(nèi)進(jìn)行轉(zhuǎn)換 (3)不要試圖對(duì)字符型文件內(nèi)容進(jìn)行轉(zhuǎn)換,因?yàn)槲募叽缫话闱闆r下都比較大 (4)對(duì)于2和3兩種情況,應(yīng)該使用MultiByteToWideChar和WideCharToMultiByte函數(shù) |
|