使用泛型數據類型
如果您在程序代碼中使用泛型數據類型,只要使用預處理器指示詞在頭檔 #include 語句之前定義 「UNICODE」,就可以針對 Unicode 編譯。 若要 編譯Windows (ANSI) 代碼頁的程式代碼,請省略 “UNICODE” 定義。 新的 Windows 應用程式應該使用 Unicode 來避免不同代碼頁的不一致,並簡化當地語系化。
若要建立原始程式碼,可以編譯成使用 Unicode 字元和字串,或使用 Windows 代碼頁中的字元和字串:
針對用於文字的所有字元和字串類型,使用泛型數據類型,例如 TCHAR、LPTSTR 和 LPTCH。 如需泛型類型的詳細資訊,請參閱 適用於字串的 Windows 資料類型。
請確定非文字數據緩衝區或二進位位元組陣列的指標是以 LPBYTE 或 LPWORD 等數據類型編碼,而不是 LPTSTR 或 LPTCH 類型。
適當地使用 LPVOID,將不確定類型的指標明確宣告為 void 指標。
使指標運算與類型無關。 使用 TCHAR 大小的單位會產生定義 UNICODE 時為 2 個字節的變數,如果未定義 UNICODE,則為 1 個字節。 使用指標算術一律會傳回指標所指出的元素數目,不論元素的大小是 1 或 2 個字節。 不論是否已定義 UNICODE,下列表達式一律會擷取元素數目。
cCount = lpEnd - lpStart;
下列表達式會決定使用的位元元組數目。
cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);
不需要變更如下的語句,因為指標遞增指向下一個字元元素。
chNext = *++lpText;
將字串常值和顯示字元常數替換為巨集。 變更如下的表達式。
while(*lpFileName++ != '\\') { // ... }
在此表達式中使用 TEXT 巨集。
while(*lpFileName++ != TEXT('\\')) { // ... }
TEXT 巨集會在定義 UNICODE 時,將字串評估為 L"string",否則會評估為 "string"。 為了更方便管理,請將常數字串移至資源中,特別是當它們包含不在 ASCII 範圍內的字元(0x00 到 0x7F)或在使用者介面中顯示時。 若要支援不同國家/地區語言的應用程式當地語系化,所有使用者介面字串都必須在可本地化的資源中。
使用 Windows 函式的泛型版本。 如需詳細資訊,請參閱函式原型 的慣例。
使用標準 C 連結庫字串函式的泛型版本,並記得定義 「_UNICODE」 和 「UNICODE」 如 標準 C 函式中所述。
如果您要調整原本針對 Windows 代碼頁撰寫的應用程式,請記得變更任何依賴 255 為字元最大值的程式代碼。
當您編譯上述撰寫的程式代碼時,編譯程式可以從相同的來源建立應用程式的 Unicode 和 Windows 代碼頁版本。 根據 UNICODE 的定義,泛型函式會解析為產生相同的二進位檔,就像您只撰寫 Unicode 的程式代碼或針對 Windows 代碼頁撰寫的程式代碼一樣。
相關主題