[Microsoft][C] convertir un char* en PCWSTR

convertir un char* en PCWSTR [Microsoft][C] - C - Programmation

Marsh Posté le 13-09-2012 à 15:33:18    

Bonjour,  
Je voudrais renseigner un PCWSTR avec le contenu d'un char* en C.
Contexte : j'ai trouvé sur Internet une fonction qui parse le contenu d'un fichier xml en C et dont voici le prototype :  
void parseXmlKeyFile (PCWSTR pcwstrXmlFileName);
et je voudrais lui passer un nom de fichier qui se trouve dans un char*, par exemple "toto.txt".  
Visiblement, je ne me pose pas la bonne question parce que je n'ai trouvé nulle part de réponse à ce problème sur Internet, mais je ne m'en sors pas.  
Si quelqu'un peut m'aider, ce serait très gentil.
Marie
 

Reply

Marsh Posté le 13-09-2012 à 15:33:18   

Reply

Marsh Posté le 13-09-2012 à 16:01:44    

Bah PCWSTR est juste un typedef pour "const wchar_t *". Il faut donc convertir ton char * en wchar_t *. Tu peux utiliser la fonction MultiByteToWideChar :

Code :
  1. wchar_t path[256];
  2. char *  a_convertir = ...;
  3.  
  4. MultiByteToWideChar(CP_ACP, 0, a_convertir, -1, path, sizeof (path) / sizeof (path[0]));
  5.  
  6. return parseXmlKeyFile(path)


 
Un code un peu plusse mieux, qu'on évitera de repomper si on n'y comprends rien:

Code :
  1. wchar_t * path;
  2. int       max;
  3. char *    a_convertir = ...;
  4.  
  5. max = MultiByteToWideChar(CP_UTF8, 0, a_convertir, -1, NULL, 0);
  6. path = alloca(sizeof path[0] * max);
  7. MultiByteToWideChar(CP_UTF8, 0, a_convertir, -1, path, max);
  8.  
  9. return parseXmlKeyFile(path)


 
Bref, regarde la définition de cette fonction http://msdn.microsoft.com/en-us/li [...] 85%29.aspx

Reply

Marsh Posté le 13-09-2012 à 16:08:45    

Merci.
Ton code ne marche pas tout à fait parce que MultiByteToWideChar prend en argument un LPWSTR et pas un PCWSTR, c'est-à-dire un WCHAR* et pas un CONST WCHAR*, mais ça s'arrange en introduisant une variable intermédiaire de type LPWSTR, en appelant MultiByteToWideChar dessus et en renseignant la variable de type PCWSTR avec la variable de type LPWSTR.  
Problème résolu.
Marie

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed