TCHAR & TEXT

Résolu
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
 Utilisateur anonyme -
Yop,

Bon j'ai pris une grande respiration et j'ai commencé la lecture (traduction) du livre de petzold et j'ai enfin trouvé des information sur TCHAR et TEXT que je croisai svt dans les source. Cependant cela reste un peut flou. En résumé , TCHAR et TEXT sont des macro qui gère automatiquement soit le ascii ou l'unicode c'est cela en gros ?

Merci d'avance.
A voir également:

8 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Oui c'est  ça. TCHAR devient char dans le mode ANSI et devient WCHAR en Unicode.
TEXT permet de considérer une chaine en ANSI ou Unicode selon le cas.

Le but de tout cela est de permettre d'utiliser le même code source pour les deux cas.
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Merci racpp, hey tu es admin now ;)
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Encore un question , si on fait :

printf("\n %s",TEXT("yop"));

Cela ne sert a rien car si c'est mode ansi , cava mais si c'est unicode , certe TEXT traite le text en unicode mais il ne s'affichera pas car c'est la fonction printf qui est employée et pas wprintf :s
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

printf c'est une fonction ansi, donc elle attend une chaine ansi.

wprintf c'est la version unicode de printf, et _tprintf c'est la macro
qui sera remplacée par printf ou wprintf selon les #define.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Toutes les fonctions API Windows ayant comme paramètre des pointeurs sur chaines de caractères, existent en deux versions. Une pour ANSI et l'autre pour Unicode. Exemple:
MessageBox() -> MessageBoxA() et MessageBoxW(). Le compilateur choisit celle qui convient selon que le mode Unicode est défini ou non. D'autres librairies proposent une fonction distincte pour chaque mode. Un fichier header permet au compilateur de choisir la fonction convenable pour chaque mode. Malheureusement, ce n'est pas toujours le cas.

printf c'est un fonction OEM ascii étandu OEM et non ainsi je crois
parceque faite:
printf("é"); ca va vous afficher un "ù" !!!

et si vous faites:
char chaine[10]="é";
OemToChar(chaine, chaine);
printf("%s", chaine);
la on va voir le "é" dans la console dos

deck_bsd oui avec visual c++ quand tu choisi le mode unicode regarde dans l'appel du compilateur ca déclare la constante UNICODE comme cela: 
/D "_UNICODE"  c'est comme si tu metté avant l'header windows #define UNICODE et en fonctionde cela il va faire par exemple:
#ifdef UNICODE
#define DeleteFile DeleteFileW
#else
#define DeleteFile DeleteFileA



MaLaDeDeDe 97one 
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
oui donc en clair j'avai vu juste . pour une total portabilité le bon code serai :

_tprintf("\n %s",TEXT("yop"));

:D

J'était du meme avis que toi mais j'ai testé: _tprintf(TEXT(
"\n %s"),TEXT(
"yopé"));

ou _tprintf(L"
\n %s"),L
"yopé"); car c'est la meme chose... et la console m'a écrit un gros ù malgré le fait que l'on soir en unicode je comprend plus rien la.

sinon je l'ai appris cette semaine sur le forum ca TEXT("yop lol"); et L"yop lol"; c'est pareil pour qu'une chaine soir unicode.
MaLaDeDeDe 97one