VC++ 6.0支援Unicode編程,但預設的是ANSI,所以開發人員只需要稍微改變一下編寫代碼的習慣便可以輕鬆編寫支援UNICODE的應用程式。使用VC++ 6.0進行Unicode編程主要做以下幾項工作:
1、為工程添加UNICODE和_UNICODE預先處理選項。
具體步驟:開啟[工程]->[設定…]對話方塊,在C/C++標籤對話方塊的“預先處理程式定義”中去除_MBCS,加上_UNICODE,UNICODE。(注意中間用逗號隔開).
在沒有定義UNICODE和_UNICODE前,所有函數和類型都預設使用ANSI的版本;在定義了UNICODE和_UNICODE之後,所有的MFC類和Windows API都變成了寬位元組版本了。
2、設定程式進入點
因為MFC應用程式有針對Unicode專用的程式進入點,我們要設定entry point。否則就會出現串連錯誤。
設定entry point的方法是:開啟[工程]->[設定…]對話方塊,在Link頁的Output類別的Entry Point裡填上wWinMainCRTStartup。
3、使用ANSI/Unicode通用資料類型
微軟提供了一些ANSI和Unicode相容的通用資料類型,我們最常用的資料類型有_T ,TCHAR,LPTSTR,LPCTSTR。
順便說一下,LPCTSTR和const TCHAR*是完全等同的。其中L表示long指標,這是為了相容Windows 3.1等16位作業系統遺留下來的,在Win32 中以及其它的32位作業系統中,long指標和near指標及far修飾符都是為了相容的作用,沒有實際意義。P(pointer)表示這是一個指標;C (const)表示是一個常量;T(_T宏)表示相容ANSI和Unicode,STR(string)表示這個變數是一個字串。綜上可以看出, LPCTSTR表示一個指向常固定地址的可以根據一些宏定義改變語義的字串。比如:
TCHAR* szText=_T(“Hello!”);TCHAR szText[]=_T(“I Love You”);LPCTSTR lpszText=_T(“大家好!”);使用函數中的參數最好也要有變化,比如:MessageBox(_T(“你好”));
其實,在上面的語句中,即使您不加_T宏,MessageBox函數也會自動把“你好”字串進行強制轉換。但我還是推薦您使用_T宏,以表示您有Unicode編碼意識。
4、修改字串運算問題
一些字串操作函數需要擷取字串的字元數(sizeof(szBuffer)/sizeof(TCHAR)),而另一些函數可能需要擷取字串的位元組數sizeof(szBuffer)。您應該注意該問題並仔細分析字串操作函數,以確定能夠得到正確的結果。
ANSI操作函數以str開頭,如strcpy(),strcat(),strlen();
Unicode操作函數以wcs開頭,如wcscpy,wcscpy(),wcslen();
ANSI/Unicode操作函數以_tcs開頭 _tcscpy(C運行期庫);
ANSI/Unicode操作函數以lstr開頭 lstrcpy(Windows函數);
考慮ANSI和Unicode的相容,我們需要使用以_tcs開頭或lstr開頭的通用字串操作函數。
舉個Unicode編程的例子
第一步:
開啟VC++6.0,建立基於對話方塊的工程Unicode,主對話方塊IDD_UNICODE_DIALOG中加入一個按鈕控制項,雙擊該控制項並添加該控制項的響應函數:
void CUnicodeDlg::OnButtonUnicode() { TCHAR* str1=_T("ANSI和UNICODE編碼實驗"); m_disp=str1; UpdateData(FALSE);} 添加靜態文字框IDC_DISP,使用ClassWizard給該控制項添加CString類型變數m_disp。使用預設ANSI編碼環境編譯該工程,產生Unicode.exe。
第二步:修改系統內碼
開啟“控制台”,單擊“日期、時間、語言和地區設定”選項,在“日期、時間、語言和地區設定”視窗中繼續單擊“ 地區和語言選項”選項,彈出“地區和語言選項”對話方塊。在該對話方塊中,單擊“進階”標籤,將“非Unicode的程式的語言”選項改為“日語”,單擊“應用”按鈕,
彈出的對話方塊單擊“是”,重新啟動電腦使設定生效。
運行Unicode.exe程式並單擊“Button1”按鈕,看,靜態文字框出現了亂碼。
第三步:
改為Unicode編碼環境編譯該工程,產生Unicode.exe。再次運行Unicode.exe程式並單擊“Unicode”按鈕。看到Unicode編碼的優勢了吧。
本文來自: IT知道網(http://www.itwis.com) 詳細出處參考:http://www.itwis.com/html/c/ctool/20091127/7024.html