Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
903 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2156642
plieuse
Posté le 13-09-2012 à 15:33:18  profilanswer
 

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
 

mood
Publicité
Posté le 13-09-2012 à 15:33:18  profilanswer
 

n°2156649
tpierron
Posté le 13-09-2012 à 16:01:44  profilanswer
 

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

n°2156653
plieuse
Posté le 13-09-2012 à 16:08:45  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
Erreur de Link (Visual C++ 2005)[C#] Expression régulières
Visual C++ 2010 - Lancer un batch dos depuis un bouton(Cplex & C++) Comment résupérer les variables de base ?
Communication TCP Matlab-C++[C / C++] Lire informations disque dur
int16_t[400] et char[400] xor en C[C][reseau] connection tcp (3 voies) raw socket
Temporisation - Langage C - Launchpad MSP430[XCode/Objective C] Que fais la fonction appendFormat?
Plus de sujets relatifs à : [Microsoft][C] convertir un char* en PCWSTR


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR