Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
_UNICODEavant 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 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
wcsfamille de fonctions, mais vous préférerez peut-être les macros entièrement portables (à_TCHARl’échelle internationale). Ces macros sont toutes précédées_tcs; elles remplacent, une pour une, pour lastrfamille 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
_TCHARet 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
_Tmacro 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 MBCS) sans Unicode. Par exemple, à la place de :pWnd->SetWindowText( "Hello" );utiliser :
pWnd->SetWindowText( _T("Hello") );Avec
_UNICODEdéfini,_Ttraduit la chaîne littérale en forme préfixée L ; sinon,_Ttraduit la chaîne sans le préfixe L.Conseil
La
_Tmacro est identique à la_TEXTmacro.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
_UNICODEelle est définie, l’appel suivant à unCArchiveobjet ne fonctionnera pas (strest unCString) :archive.Write( str, str.GetLength( ) ); // invalidDans 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 ) ); // validqui 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::TextOutprend 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.CStringfournit é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 à MBCS. Il s’agit des
_tcsmacros.)tchar.h fournit des types de données portables et la
_Tmacro 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. Permetwmainde prendre en charge votre application Unicode.