使用Unicode的優勢:
- 便于在不同語言之間進行資料交換,
- 讓你的exe或者dll檔案支持所有的語言,
- 提高應用程式的執行效率,
Windows2000是使用Unicode重新開發的,核心部分都需要Unicode字串,所以:
- 當引數中傳入一個ANSI字串,那么系統就要先把這個ANSI字串轉換成Unicode,然后將Unicode字串傳給系統;
- 當回傳值是一個ANSI字串,那么系統首先要把Unicode轉成ANSI,才能回傳給應用程式,
這些操作必須要分配記憶體,呼叫函式,都是在你看不到的情況下發生的,因此直接使用Unicode,可以讓你的應用程式更加高效率地運行,
C語言對Unicode的支持是wchar_t,在VS中則是定義UINICODE和_UNICODE,
ANSI改成Unicode字串有三種方式,字串前加一個L、使用TEXT宏和_T宏,
如果是使用的DLL和呼叫它的EXE,分別使用Ansi版本和Unicode版本,只需要分配記憶體,然后轉換就可以呼叫了,
對于功能相同的兩個函式,盡量使用Unicode的版本,
ShlWApi.h頭檔案中,也提供了操作字串的Ansi和Unicode版本,
轉換你的應用程式到Unicode版本的一些基本原則:
- 將文本視為字串,而不是char或者位元組陣列
- 對于文本字串和字串,使用通用資料型別(TCHAR或者PTSTR)
- 對于位元組、位元組指標和資料快取,使用顯式資料型別(BYTE,PBYTE)
- 將TEXT宏用在字符和字串上,
- 執行全域性替換(例如使用PTSTR替換PSTR)
- 字串運算問題,使用Unicode版本字串后,在分配記憶體的時候必須寫sizeof(szBuffer)/sizeof(TCHAR),這樣的失誤,編譯器不會發出任何警告,
Windows對字串進行操作的函式:lstrcat、lstrcmp、lstrcmpi、lstrcpy、lstrlen,這些函式是作為宏實作的,真正比較兩個Unicode字串的函式是CompareString(LCID lcid, DWORD fdwStyle, PCWSTR pString1, int cch1, PCTSTR pString2, int cch2);
- 第一個引數是函式GetThreadLocale()的回傳值,它回傳當前語言的設定;
- 第二個引數用于標識一些標志,用于比較字串時的方式,使用lstrcmp和lstrcmpi的話,默認值是不一樣的,
其他的C運行時函式為了支持Unicode的版本,例如CharLower、CharUpper、CharLowerBuff、CharUpperBuff、IsCharAlpha、isAlphaNumber,
最后一個是printf函式家族,有char版本的sprintf和swprintf,
資源內的字串們,會使用Unicode,不是也被系統內部轉換,
確定字串是Ansi還是Unicode,可以使用函式IsTextUnicode區分,盡管它有可能回傳不正確的結果,
在Unicode和Ansi之間轉換字串,使用兩個函式MultiByteToWideChar和WideCharToMultiByte,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/6509.html
標籤:Windows
上一篇:windows系統安裝、制作U盤工具,vm虛擬機U盤安裝windows
下一篇:記第一次重裝系統
