Mappage _TCHAR

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Unicode pour C++ - Index


Le mappage _TCHAR dans Appmethod C++ a été conçu pour rendre plus facile l'écriture du code source qui peut être utilisé avec des chaînes étendues ou étroites. Vous pouvez mapper _TCHAR en wchar_t ou char afin que votre code utilise le type de chaîne correct requis par frameworks et bibliothèques Appmethod ou l'API Windows, et afin que les fonctions de la RTL migrent vers la définition correcte (respectivement, étendue ou étroite). Pour définir l'option Mappage de _TCHAR en, utilisez la boîte de dialogue Projet > Options > C++ (options partagées).

Votre application C++ doit traiter à la fois les chaînes étendues et les chaînes étroites :

  • La RTL de C++ contient des routines conçues à la fois pour char et wchar_t.
  • L'API Windows utilise typiquement les chaînes étroites, nécessitant char.
  • Frameworks et bibliothèques Appmethod utilisent des données de chaînes étendues (Unicode), nécessitant wchar_t.

Dans les interactions avec les frameworks et bibliothèques Appmethod, vous avez maintenant besoin d'utiliser les fonctions de la RTL étendues, ou effectuez les conversions adéquates avant de passer les données aux frameworks et bibliothèques Appmethod. (Voir Routines de conversion UTF-8).

_TCHAR, déclaré conditionnellement dans le fichier d'en-tête tchar.h, est défini comme un typedef (alias) qui est mappé en char ou wchar_t. Quand vous voulez écrire du code portable (qui peut interagir avec la RTL de C++, l'API de Windows et les frameworks et bibliothèques Appmethod), vous devez utiliser _TCHAR (au lieu de coder en dur les types de données char ou wchar_t). Vous pouvez ensuite ajuster l'option de mappage _TCHAR sur char ou wchar_t (sur la page C++ (options partagées)). Par exemple, le paramètre de mappage _TCHAR en cours contrôle si votre application utilise les versions ANSI ou les versions étendues de la RTL Fonctions flottantes RTL.

Option "Mappage de _TCHAR en"

L'option de projet Mappage de _TCHAR en contrôle la définition flottante de _TCHAR dans votre code.
_TCHAR peut être mappé ou migré vers char ou wchar_t, comme le montre le tableau suivant :

Valeurs "Mappage de _TCHAR en" :

char
_TCHAR se substitue à char.

Remarque : Cette option ne migre pas vers les définitions étendues des fonctions de l'API et de la bibliothèque standard.

wchar_t
  • _TCHAR se substitue à wchar_t.
  • Cette option définit UNICODE et _UNICODE.
  • Elle migre vers les définitions étendues des fonctions de l'API et de la bibliothèque standard.


Définir l'option "Mappage de _TCHAR en" sur la page Répertoires et Conditions

Les frameworks et bibliothèques Appmethod sont implémentés dans Unicode et attendent toujours Unicode. Par défaut _TCHAR est mappé en wchar_t. Par exemple, le code suivant ne compile pas, à moins que vous ne définissiez l'option 'Mappage de _TCHAR en' sur wchar_t :

Utiliser "Mappage de _TCHAR en" avec wchar_t pour les frameworks et bibliothèques Appmethod

Les frameworks et bibliothèques Appmethod sont implémentés dans Unicode et attendent toujours Unicode. Par défaut _TCHAR est mappé en wchar_t.

Par exemple, le code suivant ne compile pas, à moins que vous ne définissiez l'option 'Mappage de _TCHAR en' sur wchar_t :

TResourceStream* res =  new
    TResourceStream(HInstance, ResourceId, RT_RCDATA);

Si l'option 'Mappage de _TCHAR' est définie sur char, RT_RCDATA est mappé en un char*. Les frameworks et bibliothèques Appmethod attendent wchar_t*, donc la définition de char est problématique si vous voulez travailler avec les frameworks et bibliothèques Appmethod.

Modifications de code nécessaires pour utiliser "Mappage de _TCHAR en" avec wchar_t

Quand _TCHAR est mappé sur wchar_t (le paramétrage par défaut), votre projet doit avoir un point d'entrée appelé _tmain ou _tWinMain. Les nouveaux projets créés avec Appmethod C++ ont ces points d'entrée par défaut, mais les projets importés peuvent nécessiter l'ajout manuel de ces points d'entrée. Pour garantir que les littéraux chaînes et caractères migrent correctement en ANSI ou Unicode, utilisez la macro _TEXT ou _T. Par exemple :

Vous devez aussi inclure le fichier d'en-tête tchar.h, qui contient les définitions flottantes et les points d'entrée nécessaires. Pour obtenir la liste des fonctions flottantes contenues dans tchar.h, voir Fonctions flottantes.

Remarque : Si au lieu d'utiliser _tmain, vous utilisez main en tant que point d'entrée, le lieur ne peut pas lier l'exécutable. Pour les nouveaux projets qui utilisent les frameworks et bibliothèques Appmethod, les experts insèrent automatiquement un point d'entrée _tmain.

Utiliser la macro _TEXT avant les littéraux texte

Pour garantir que les littéraux chaînes et caractères migrent correctement en ANSI ou Unicode, utilisez la macro _TEXT ou _T. Par exemple :

::MessageBox(0, _TEXT("The message"), _TEXT("The caption"), MB_OK);

Avec _UNICODE défini, la macro _TEXT (ou _T) convertit une chaîne littérale (caractère) en une fiche préfixée par L. Sinon, _TEXT convertit le littéral sans le préfixe L. Par exemple, si vous définissez _UNICODE, alors Sinon, cette macro effectue la conversion sans le préfixe L :

_TEXT("The message")

convertit en une fiche préfixée par L :

L"The message"

Sinon, cette macro effectue la conversion sans le préfixe L :

"The message"

Voir aussi