Partager via


Synthèse de la programmation Unicode

Pour tirer parti de la prise en charge du temps d’exécution MFC et C pour Unicode, vous devez :

  • Définir _UNICODE.

    Définissez le symbole _UNICODE avant de générer votre programme.

  • Spécifiez le point d’entrée.

    Dans la page Avancé du dossier Éditeur de liens dans la boîte de dialogue Pages de propriétés du projet, définissez le symbole wWinMainCRTStartuppoint d’entrée sur .

  • Utilisez des fonctions et des types d’exécution portables.

    Utilisez les fonctions d’exécution C appropriées pour la gestion des chaînes Unicode. Vous pouvez utiliser la wcs famille de fonctions, mais vous préférerez peut-être les macros entièrement portables (à _TCHAR l’échelle internationale). Ces macros sont toutes précédées _tcs; elles remplacent, une pour une, pour la str famille de fonctions. Ces fonctions sont décrites en détail dans la section Internationalisation de la référence de la bibliothèque d’exécution. Pour plus d’informations, consultez Mappages de texte générique dans tchar.h.

    Utilisez _TCHAR et les types de données portables associés décrits dans La prise en charge d’Unicode.

  • Gérez correctement les chaînes littérales.

    Le compilateur Visual C++ interprète une chaîne littérale codée comme suit :

    L"this is a literal string"
    

    pour signifier une chaîne de caractères Unicode. Vous pouvez utiliser le même préfixe pour les caractères littéraux. Utilisez la _T macro pour coder des chaînes littérales de manière générique, afin qu’elles se compilent en tant que chaînes Unicode sous Unicode ou en tant que chaînes ANSI (y compris Mo CS) sans Unicode. Par exemple, à la place de :

    pWnd->SetWindowText( "Hello" );
    

    utiliser :

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

    Avec _UNICODE défini, _T traduit la chaîne littérale en forme préfixée L ; sinon, _T traduit la chaîne sans le préfixe L.

    Conseil

    La _T macro est identique à la _TEXT macro.

  • Veillez à passer des longueurs de chaîne aux fonctions.

    Certaines fonctions veulent le nombre de caractères dans une chaîne ; d’autres souhaitent le nombre d’octets. Par exemple, si _UNICODE elle est définie, l’appel suivant à un CArchive objet ne fonctionnera pas (str est un CString) :

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

    Dans une application Unicode, la longueur vous donne le nombre de caractères, mais pas le nombre correct d’octets, car chaque caractère est de 2 octets de large. Au lieu de cela, vous devez utiliser :

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

    qui spécifie le nombre correct d’octets à écrire.

    Toutefois, les fonctions membres MFC orientées caractères, plutôt que orientées octets, fonctionnent sans ce codage supplémentaire :

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

    CDC::TextOut prend un certain nombre de caractères, pas un nombre d’octets.

  • Utilisez fopen_s, _wfopen_s pour ouvrir des fichiers Unicode.

Pour résumer, MFC et la bibliothèque d’exécution fournissent la prise en charge suivante de la programmation Unicode :

  • À l’exception des fonctions membres de la classe de base de données, toutes les fonctions MFC sont compatibles Unicode, notamment CString. CString fournit également des fonctions de conversion Unicode/ANSI.

  • La bibliothèque d’exécution fournit des versions Unicode de toutes les fonctions de gestion des chaînes. (La bibliothèque d’exécution fournit également des versions portables adaptées à Unicode ou à Mo CS. Il s’agit des _tcs macros.)

  • tchar.h fournit des types de données portables et la _T macro pour traduire des chaînes littérales et des caractères. Pour plus d’informations, consultez Mappages de texte générique dans tchar.h.

  • La bibliothèque d’exécution fournit une version à caractères larges de main. Permet wmain de prendre en charge votre application Unicode.

Voir aussi

Prise en charge pour Unicode