Conversion des chaines de caractères [Résolu]

Messages postés
49
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
- - Dernière réponse : Kaneda Shotaro
Messages postés
49
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
- 26 août 2005 à 21:57
Je suis vraiment perdu : il y a tellement de types de chaines de caractères que je ne sais plus où donner de la tête !

Où pourrais-je trouver de la doc (en français si possible) sur les
différents types (char, TCHAR, WCHAR, LPCWSTR, etc.) et sur les
fonctions de conversion car à chaque fois que je veux utiliser une
fonction le type de chaine change !!!



Merci.


@+, Kaneda Shotaro
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
3
Merci
D'accord, c'est parce que tu compiles en mode UNICODE. Essaie ceci:
void GetAppPath(char* Fichier)
{
char* c = Fichier + GetModuleFileNameA(NULL, Fichier, 300);
while(*c !'\\') c--; *c 0;
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
3
Merci
void GetAppPath(char* Fichier)
{
char* c = Fichier + GetModuleFileNameA(NULL, Fichier, 300);
while(*c !'\\') c--; *c 0;
}

void InitApp()
{
char Test[300];
GetAppPath(Test);
}

Je t'ai dit plus haut qu'il faut une zone de mémoire assez grande. 1 octet ne suffit pas, évidemment

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
MSDN pour ces "types", qui sont de simples alias de windows.
En ANSI (le plus courant):
TCHAR=char, LPCTSTR = const char*
En Unicode:
TCHAR wchar_t, LPCTSTR const wchar_t*
Entre autres bien sur. Mais sache que ce ne sont pas de types, et tu peux toujours t'en passer
Commenter la réponse de vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
Pour les conversion de Unicode à ANSI, et le contraire (les seules ou un cast ne convient pas)
MultiByteToWideChar et WideCharToMultiByte
Commenter la réponse de vecchio56
Messages postés
49
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
0
Merci
D'accord mais par exemple j'ai une fonction qui récupère le répertoire
de l'application et qui passe au paramètre "Fichier" ce dernier :



void GetAppPath(char* Fichier)

{

TCHAR szThis[MAX_PATH];

TCHAR* c = szThis + GetModuleFileName(NULL, szThis, 300);

while(*c !'\\') c--; *c 0;

//Et là ? Je mets quoi pour mettre dans la variable Fichier le contenu de szThis ?

}



Merci

@+, Kaneda Shotaro
Commenter la réponse de Kaneda Shotaro
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
Tu utilise strcpy, mais le mieux est de travailler dès le début avec Fichier:

void GetAppPath(char* Fichier)
{
TCHAR* c = Fichier + GetModuleFileName(NULL, Fichier, 300);
while(*c !'\\') c--; *c 0;
}

Bien sur, Fichier doit pointer sur une zone assez grande. Il faudrait dans l'idéal permettre à l'utilisateur de spécifier cela:

void GetAppPath(char* Fichier, int max)
{
TCHAR* c = Fichier + GetModuleFileName(NULL, Fichier, max);
while(*c !'\\') c--; *c 0;
}
Commenter la réponse de vecchio56
Messages postés
49
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
0
Merci
J'ai Visual Studio 2005 et avec ta solution j'ai cette erreur :



1>c:\documents and settings\kaneda shotaro\mes documents\visual
studio projects\medie world\medie world.cpp(190) : error C2664:
'GetModuleFileNameW' : cannot convert parameter 2 from 'char *' to
'LPWCH'

1> Types pointed to are
unrelated; conversion requires reinterpret_cast, C-style cast or
function-style cast




@+, Kaneda Shotaro
Commenter la réponse de Kaneda Shotaro
Messages postés
49
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
0
Merci
Merci beaucoup pour ton aide !

Par contre si jemets un breakpoint pour visualiser la valeur de Fichier j'obtiens juste 'c'...

@+, Kaneda Shotaro
Commenter la réponse de Kaneda Shotaro
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
Tu es en mode debug?
Commenter la réponse de vecchio56
Messages postés
49
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
0
Merci
Oui

@+, Kaneda Shotaro
Commenter la réponse de Kaneda Shotaro
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
Pendant le breakpoint, tu fais
Déboguer>Fenêtres>Espion>Espion 1
Un nouveau paneau va apparaitre en bas, tu peux taper des noms de variables pour voir leur valeur. Normalement en passant le pointeur dessus ca marche aussi
Commenter la réponse de vecchio56
Messages postés
49
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
0
Merci
C'est ce que j'ai fais ! En fait, j'ai même un plantage :

"Unhandled exception at 0x656d7563 in Medie World.exe: 0xC0000005: Access violation reading location 0x656d7563."



Voilà mon code :



void GetAppPath(char* Fichier)

{

char* c = Fichier + GetModuleFileNameA(NULL, Fichier, 300);

while(*c !'\\') c--; *c 0;

}



void InitApp()

{

char Test;

GetAppPath(&Test);

}

@+, Kaneda Shotaro
Commenter la réponse de Kaneda Shotaro
Messages postés
49
Date d'inscription
dimanche 14 août 2005
Statut
Membre
Dernière intervention
12 septembre 2009
0
Merci
Oups ! Désolé ! Merci beaucoup pour toute cette aide.

@+, Kaneda Shotaro
Commenter la réponse de Kaneda Shotaro