共用方式為


Unicode 程式設計摘要

若要利用 Unicode 的 MFC 和 C 執行時間支援,您需要:

  • 定義 _UNICODE

    在建置程式之前定義符號 _UNICODE

  • 指定進入點。

    在專案的屬性頁對話框中,連結器資料夾的進階頁面上,將進入點符號設定為wWinMainCRTStartup

  • 使用可攜式運行時間函式和類型。

    使用適當的 C 執行時間函式來處理 Unicode 字串。 您可以使用 wcs 函數系列,但您可能更偏好具備國際化能力的完全可移植 _TCHAR 巨集。 這些巨集全都加上了_tcs作為前綴,每個巨集都會逐一替換 str 函數系列的函數。 這些函式在國際化一節中的執行時期程式庫參考中詳細說明。 如需詳細資訊,請參閱 tchar.h 中的泛型文字對應。

    使用 _TCHAR 和在 支援 Unicode 功能中所述的相關可攜式數據類型。

  • 正確處理常值字串。

    Visual C++ 編譯程式會將編碼為的常值字串解譯為:

    L"this is a literal string"
    

    表示 Unicode 字元的字串。 您可以針對字面字符使用相同的前置詞。 _T 宏的用法是以通用方式撰寫字面字串的程式碼,因此在啟用 Unicode 時,它們會編譯為 Unicode 字串,否則會編譯為 ANSI 字串(包括 MBCS)。 例如,不要這樣撰寫:

    pWnd->SetWindowText( "Hello" );
    

    使用:

    pWnd->SetWindowText( _T("Hello") );
    

    _UNICODE 已定義, _T 會將常值字串轉譯為 L 前置詞格式,否則會 _T 轉譯不含 L 前置詞的字串。

    提示

    _T巨集與_TEXT巨集相同。

  • 請小心將字串長度傳遞至函式。

    某些函式想要字串中的字元數;其他則想要位元組數目。 例如,如果 _UNICODE 已定義,對物件的下列呼叫 CArchive 將無法運作(strCString):

    archive.Write( str, str.GetLength( ) );    // invalid
    

    在 Unicode 應用程式中,長度會提供字元數,但無法提供正確的位元陣數目,因為每個字元寬 2 個字節。 相反地,您必須使用:

    archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) );    // valid
    

    ,指定要寫入的正確位元組數目。

    不過,以字元為導向的 MFC 成員函式,而不是位元組導向,不需要撰寫額外的程式代碼即可運作:

    pDC->TextOut( str, str.GetLength( ) );
    

    CDC::TextOut 接受的是字元數,而不是位元組數。

  • 使用 fopen_s,_wfopen_s 開啟 Unicode 檔案。

總而言之,MFC 和執行階段庫提供下列的 Unicode 程式設計支援:

  • 除了資料庫類別成員函式之外,所有 MFC 函式都已啟用 Unicode,包括 CStringCString 也提供 Unicode/ANSI 轉換函式。

  • 執行時期程式庫提供所有字串處理函式的 Unicode 版本。 (執行階段庫也提供適用於 Unicode 或 MBCS 的可攜式版本。這些是 _tcs 巨集。)

  • tchar.h 提供可攜式數據類型和 _T 巨集來翻譯常值字串和字元。 如需詳細資訊,請參閱 tchar.h 中的泛型文字對應。

  • 執行時函式庫提供的寬字元版本main。 使用 wmain 讓應用程式具備 Unicode 感知能力。

另請參閱

Unicode 的支援