Votre question

manipulation LPCWSTR et char[] en c++

Tags :
  • Programmation
Dernière réponse : dans Programmation
3 Octobre 2005 21:32:51

salut a tous,
je suis en train de realiser un petit prog avec directshow et j'ai quelques diffcultées.
je dois utiliser une fonction qui prend en paramatre le chemin d'un fichier pour le lire.

HRESULT RenderFile(

LPCWSTR chemin_fichier,
LPCWSTR lpwstrPlayList
);

le pb c'est qu'avec la fonction GetOpenFileName, je recupere bien le chemin du fichier que je mets dans une variable fichier[MAX_PATH], et quand je la passe en tant que 1er parametre, le compilo me dit qu'il ne peut convertir un char[260] en LPCWSTR.

donc je caste ma variable ainsi:
HRESULT hr = RenderFile((LPCWSTR)fichier, NULL);
mais hr echoue.

en fait je me suis rendu d'une chose:
lorsque je tape manuellement le chemin du fichier precedé par un L ca marche:
HRESULT hr = RenderFile(L"C:\\dossier\\file.mp3", NULL);

une idée sur la maniere de faire pour pouvoir pouvoir placer ma variable dans cette putaine de fonction ? heuu... pardon

Autres pages sur : manipulation lpcwstr char

4 Octobre 2005 09:35:41

salut,

effectivement le L précédent une chaine de caractère permet de signifier au compilo que c'est une chaine UNICODE.
Si tu utilises VC tu peux utiliser la macro A2W qui te renvoie un LPWSTR (il faut auparavant utiliser l'autre macro USES_CONVERSION; ).
dans ton exemple tu devrais pouvoir l'utiliser de la façon suivante :
  1. USES_CONVERSION;
  2. HRESULT hr = RenderFile((LPCWSTR)A2W(fichier), NULL);

a b L Programmation
4 Octobre 2005 13:00:54

Je n'ai jamais mélangé les char* et les LPCWSTR, mais cette macro prend un char * ?
Parce que si c'est le cas, il y a une allocation puisque qu'on passe de 1 à 2 octets pour un caractère, donc n'y a-t-il pas un désallocation à faire quelque part ?
A moins que ça ne prenne que des wchar_t, au quel cas, il faut faire la copie soi-même.

Edit: dans atlconv.h:

  1. #define A2W(lpa) (\
  2. ((LPCSTR)lpa == NULL) ? NULL : (\
  3. _convert = (lstrlenA(lpa)+1),\
  4. ATLA2WHELPER((LPWSTR) alloca(_convert*2), lpa, _convert)))

C'est bon ça alloue sur la pile, donc c'est libéré à la sortie de la fonction courante.
C'est confimé là:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_atl_string_conversion_macros.asp

Donc c'est une bonne macro ;-)
4 Octobre 2005 16:55:25

j'ai trouvé sur cppfrance.
en fait il faut utiliser MultiByteToWideChar.
il convertit le char en large char.
merci de votre aide a tous les aides
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS