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 FireMonkey, la VCL 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.
  • Depuis 2009, FireMonkey et VCL utilisent des données de chaînes étendues (Unicode), nécessitant wchar_t.

Dans les interactions avec FireMonkey et VCL, vous avez maintenant besoin d'utiliser les fonctions de la RTL étendues, ou effectuez les conversions adéquates avant de passer les données à FireMonkey ou VCL. (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, FireMonkey et la VCL), 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.

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

Utilisez la boîte de dialogue Projet > Options > C++ (options partagées).

Utiliser "Mappage de _TCHAR en" avec wchar_t pour FireMonkey et VCL

FireMonkey et VCL 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 en' est définie sur char, RT_RCDATA est mappé en un char*. FireMonkey et VCL attendent wchar_t*, donc la définition de char est problématique si vous voulez travailler avec FireMonkey ou VCL.

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.

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 FireMonkey ou VCL, 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

_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