IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

Conversion de std::string en LPCWSTR


Sujet :

SL & STL C++

  1. #1
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut Conversion de std::string en LPCWSTR
    Bonjour,

    Pas moyen de trouver comment convertir un std::string en LPCWSTR...
    J'ai essayé de le caster :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LPCWSTR lpFileName = (TCHAR*)fileName.c_str();
    mais ça ne fonctionne pas ...

    Cordialement,
    Rodrigue
    Rodrigue

  2. #2
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    ...en fait ce serait même en LPCTSTR! C'est le nom du fichier passé dans la méthode CreateFile.
    Quand je fais je récupère un const char*
    Rodrigue

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    A priori c'est bien d'un const char* dont tu as besoin, tu ne devrais pas avoir de problème -- à moins que tu ne sois en unicode, mais dans ce cas il faut travailler avec des std::wstring.

  4. #4
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Ah zut! Je ne sais pas je suis en C++/CLI. Je ne me soucie pas de ce genre de chose (p-e que je devrais ). Sinon j'ai trouvé deux solutions :
    1. Utiliser CreatFileA (au lieu de CreateFileW utilisé normalement)
    2. Faire une conversion:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
       //ANSI->Unicode
      int Size = MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, NULL, 0);
      LPWSTR wUnicode = new WCHAR[Size];
      MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, wUnicode, Size);
    Pour mes classes, je pense que c'est mieux d'utiliser std::string plutôt que std::wstring non ?
    Rodrigue

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Rodrigue
    Ah zut! Je ne sais pas je suis en C++/CLI. Je ne me soucie pas de ce genre de chose (p-e que je devrais ).
    Clairement, oui, tu devrais... C'est un peu comme si tu ne savais pas si tu faisais du C ou du C++ (remarque, ça arrive parfois aussi).

    Citation Envoyé par Rodrigue
    Utiliser CreatFileA (au lieu de CreateFileW utilisé normalement)
    Si c'est CreateFileW qui est utilisé alors tu es en unicode, et il faut donc gérer les chaînes en unicode. Si tu ne veux pas de l'unicode alors désactive-le simplement.

    Citation Envoyé par Rodrigue
    Faire une conversion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     //ANSI->Unicode
    int Size = MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, NULL, 0);
    LPWSTR wUnicode = new WCHAR[Size];
    MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, wUnicode, Size);
    Si tu utilisais std::wstring tu n'en aurais pas besoin.

    Citation Envoyé par Rodrigue
    Pour mes classes, je pense que c'est mieux d'utiliser std::string plutôt que std::wstring non ?
    Ben si tu es en unicode il faudra gérer des chaînes unicodes, et les chaînes unicode c'est wstring pas string. Mais ça ne change rien, c'est la même classe, sauf qu'elle manipule des caractères "longs".

  6. #6
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Qu'est-ce qui est le mieux? Unicode ou Ansi. Je pense que l'Unicode gère tous les caractères (même chinois etc.) ?
    Rodrigue

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je pense que l'Unicode gère tous les caractères (même chinois etc.) ?
    Oui, ça sert à ce genre de choses.

  8. #8
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Donc en fait en général, pour être à même de pouvoir traiter tous les cas, il vaut mieux privilégier std::wstring que std::string

    Merci pour ces informations fort utiles!
    Rodrigue

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Rodrigue
    Donc en fait en général, pour être à même de pouvoir traiter tous les cas, il vaut mieux privilégier std::wstring que std::string
    Non, seulement si tu es en unicode. Si tu n'es pas en unicode, tu auras des problèmes car wstring ne te renverra pas des const char*.

  10. #10
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Ok merci! En fait il faudrait, pour être le plus général possible, que mes fonctions implémentent l'ANSI et l'UNICODE. Les parties du programme concernées seraient choisies en fonction d'une directive de compilation...
    Rodrigue

  11. #11
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef std::basic_string<TCHAR> t_string;

  12. #12
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Ah ouais pas bête du tout ! Merci
    Rodrigue

Discussions similaires

  1. conversion de std::string
    Par 3aychoucha dans le forum C++
    Réponses: 4
    Dernier message: 29/03/2011, 18h58
  2. conversion const std::string et const char * ?
    Par panthere noire dans le forum C++
    Réponses: 7
    Dernier message: 28/02/2011, 15h51
  3. conversion std::string en std::istringstream
    Par flipper203 dans le forum SL & STL
    Réponses: 3
    Dernier message: 06/07/2006, 18h34
  4. (Problème avec...) conversion de std::string en char
    Par crossbowman dans le forum SL & STL
    Réponses: 7
    Dernier message: 05/03/2006, 19h54
  5. conversions std::string <---> CString
    Par Rupella dans le forum MFC
    Réponses: 5
    Dernier message: 21/02/2006, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo