TCHAR & TEXT [Résolu]

deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 18 août 2006 à 19:07 - Dernière réponse :  Utilisateur anonyme
- 19 août 2006 à 16:58
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.
Afficher la suite 

8 réponses

Répondre au sujet
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 18 août 2006 à 19:21
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de racpp
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 18 août 2006 à 19:48
0
Utile
Merci racpp, hey tu es admin now ;)
Commenter la réponse de deck_bsd
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 18 août 2006 à 20:11
0
Utile
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
Commenter la réponse de deck_bsd
cs_aardman 1905 Messages postés mercredi 22 janvier 2003Date d'inscription 17 septembre 2012 Dernière intervention - 18 août 2006 à 20:46
0
Utile
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.
Commenter la réponse de cs_aardman
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 18 août 2006 à 20:51
0
Utile
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.
Commenter la réponse de racpp
Utilisateur anonyme - 18 août 2006 à 22:02
0
Utile
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 
Commenter la réponse de Utilisateur anonyme
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 19 août 2006 à 11:35
0
Utile
oui donc en clair j'avai vu juste . pour une total portabilité le bon code serai :

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

:D
Commenter la réponse de deck_bsd
Utilisateur anonyme - 19 août 2006 à 16:58
0
Utile
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 
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.