使用泛型資料類型

如果您在程式碼中使用泛型資料類型,只要使用預處理器指示詞在標頭檔#include語句之前定義 「UNICODE」,就可以針對Unicode進行編譯。 若要編譯 Windows (ANSI) 字碼頁的程式碼,請省略 「UNICODE」 定義。 新的 Windows 應用程式應該使用 Unicode 來避免不同字碼頁的不一致,並簡化當地語系化。

若要建立可編譯為使用 Unicode 字元和字串的原始程式碼,或使用 Windows 字碼頁中的字元和字串:

  1. 針對用於文字的所有字元和字串類型,使用泛型資料類型,例如 TCHAR、LPTSTR 和 LPTCH。 如需泛型型別的詳細資訊,請參閱 適用于字串的 Windows 資料類型

  2. 請確定非文字資料緩衝區或二進位位元組陣列的指標是以資料類型編碼,例如 LPBYTE 或 LPWORD,而不是 LPTSTR 或 LPTCH 類型。

  3. 視需要使用 LPVOID,將不確定類型的指標明確宣告為 void 指標。

  4. 讓指標算術類型獨立。 使用 TCHAR 大小的單位會產生定義 UNICODE 時為 2 位元組的變數,如果未定義 UNICODE,則為 1 位元組。 使用指標算術一律會傳回指標所指示的元素數目,不論元素的大小是 1 或 2 個位元組。 不論是否定義 UNICODE,下列運算式一律會擷取元素數目。

    cCount = lpEnd - lpStart;
    

    下列運算式會決定使用的位元組數目。

    cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);
    

    不需要變更如下的語句,因為指標遞增會指向下一個字元元素。

    chNext = *++lpText;
    
  5. 以宏取代常值字串和資訊清單字元常數。 變更如下所示的運算式。

    while(*lpFileName++ != '\\')
    {
        // ...
    }
    

    使用此運算式中的 TEXT 宏,如下所示。

    while(*lpFileName++ != TEXT('\\'))
    {
        // ...
    }
    

    當定義 UNICODE 時, TEXT 宏會導致字串評估為 L「string」,否則會評估為 「string」。 為了方便管理,請將常值字串移至資源,特別是如果它們包含 ASCII 範圍以外的字元, (0x00透過 0x7F) 或在使用者介面上公開。 為了支援不同國家語言的應用程式當地語系化,所有使用者介面字串都必須在可當地語系化的資源中。

  6. 使用 Windows 函式的泛型版本。 如需詳細資訊,請參閱 函式原型的慣例

  7. 使用標準 C 程式庫字串函式的泛型版本,並記得定義 「_UNICODE」 和 「UNICODE」,如 標準 C 函式中所述。

  8. 如果您要調整原本為 Windows 字碼頁撰寫的應用程式,請記得變更任何依賴 255 的程式碼作為字元的最大值。

當您編譯上述所撰寫的程式碼時,編譯器可以從相同的來源建立應用程式的 Unicode 和 Windows 字碼頁版本。 根據 UNICODE 的定義,泛型函式會解析為產生與針對 Unicode 專用的程式碼或針對 Windows 字碼頁撰寫的程式碼相同的二進位檔案。

使用 Unicode 和字元集