VC6 UNICODE

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

適用平臺:Visual Studio 6.0

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編碼的優勢了吧。


VC++6.0中編寫Unicode編碼的應用程序 
  VC++ 6.0支持Unicode編程,但默認的是ANSI,所以開發人員只需要稍微改變一下編寫代碼的習慣便可以輕鬆編寫支持UNICODE的應用程序。   使用VC++ 6.0進行Unicode編程主要做以下幾項工作: 1、爲工程添加UNICODE和_UNICODE預處理選項。 
  具體步驟:打開[工程]->[設置…]對話框,如圖1所示,在C/C++標籤對話框的“預處理程序定義”中去除_MBCS,加上_UNICODE,UNICODE。(注意中間用逗號隔開)改動後如圖2:
 圖一


   2014年執業醫師資格考試 醫學綜合筆試  臨牀執業醫師  口腔執業醫師  中醫執業醫師    
 


 圖二
  在沒有定義UNICODE和_UNICODE時,所有函數和類型都默認使用ANSI的版本;在定義了UNICODE和_UNICODE之後,所有的MFC類和Windows API都變成了寬字節版本了。 
2、設置程序入口點
  因爲MFC應用程序有針對Unicode專用的程序入口點,我們要設置entry point。否則就會出現連接錯誤。
  設置entry point的方法是:打開[工程]->[設置…]對話框,在Link頁的Output類別的Entry Point裏填上wWinMainCRTStartup。



 


 


通過使用unicode編譯,軟件可以適應多種情況,如何在自己的工程中添加這兩種編譯方式呢?下面是一個簡單的步驟  
      
1、新建一個工程;  
2、選擇"Build->Configurations"菜單  
3、點擊"Add"按鈕,添加"Unicode Debug"-拷貝"win32 Debug"配置  
        添加"Unicode Release"-拷貝"win32 Release"配置 ,然後點擊"OK"  
4、選擇"Project->Setting"菜單  
5、切換到"General "TAB頁  
6、修改 "Win32 Unicode Debug" 的 Intermediate Files 和 Output Files 爲DebugU     
7、修改 "Win32 Unicode Release" 的 Intermediate Files 和 Output Files 爲ReleaseU     
8、切換到"C++ " Tab頁  
9、從下拉列表框中選擇 "Preprocessor"  
10、爲 "Win32 Unicode Debug" 和 "Win32 Unicode Release" 分別添加_UNICODE 和 UNICODE variables  
11、還要在link中,Category選output,將Entry-Point Symbol設爲wWinMainCRTStartup (控制檯程序似乎不必修改)

發佈了37 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章