在 VC6.0 下設置 Unicode 編譯環境

VC++ 6.0支持 Unicode 編程,但默認的是 ANSI,所以開發人員只需要稍微改變一下編寫代碼的習慣便可以輕鬆編寫支持 UNICODE 的應用程序。


使用 VC++ 6.0 進行 Unicode 編程主要做以下幾項工作:


1、爲工程添加 UNICODE 和 _UNICODE 預處理選項。
  具體步驟:打開 [工程]->[設置…] 對話框,在 C/C++ 標籤對話框的“Preprocessor”中去除 _MBCS,加上 _UNICODE,UNICODE。(注意中間用逗號隔開).
  在沒有定義 UNICODE 和 _UNICOD E前,所有函數和類型都默認使用 ANSI 的版本;在定義了 UNICODE 和 _UNICODE 之後,所有的 MFC類 和 Windows API 都變成了寬字節版本了。


2、設置程序入口點
  因爲 MFC 應用程序有針對 Unicode 專用的程序入口點,我們要設置entry point。否則就會出現連接錯誤。
     設置 entry point 的方法是:打開 [工程]->[設置…] 對話框,在 Link 頁的 Output 類別的 Entry-point Symbol 裏填上 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開頭的通用字符串操作函數。



注:本文轉載自:http://ipedo.blog.sohu.com/88199794.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章