Conversion des chaines de caractères

Résolu
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009 - 26 août 2005 à 20:13
Kaneda Shotaro Messages postés 48 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

13 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 août 2005 à 20:59
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;
}
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 août 2005 à 21:48
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
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 août 2005 à 20:24
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 août 2005 à 20:26
Pour les conversion de Unicode à ANSI, et le contraire (les seules ou un cast ne convient pas)
MultiByteToWideChar et WideCharToMultiByte
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009
26 août 2005 à 20:34
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 août 2005 à 20:39
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;
}
0
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009
26 août 2005 à 20:51
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
0
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009
26 août 2005 à 21:15
Merci beaucoup pour ton aide !

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

@+, Kaneda Shotaro
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 août 2005 à 21:18
Tu es en mode debug?
0
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009
26 août 2005 à 21:31
Oui

@+, Kaneda Shotaro
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 août 2005 à 21:36
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
0
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009
26 août 2005 à 21:43
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
0
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009
26 août 2005 à 21:57
Oups ! Désolé ! Merci beaucoup pour toute cette aide.

@+, Kaneda Shotaro
0
Rejoignez-nous