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

MFC Discussion :

[MFC] CString vers const char*


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut [MFC] CString vers const char*
    Bonjour,

    Je sais que ce topic est vu et revu, mais je ne trouve rien qui marche dans mon cas...

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    CString OpenFilter, MyString;
     
    OpenFilter = "Images(*.bmp)|*.bmp|All Files (*.*)|*.*||";
     
    CFileDialog Browse(
          TRUE,
          NULL,
          NULL,
          OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
          OpenFilter,                       // filter
          0,0);               // the parent window
     
    if(Browse.DoModal()==IDOK)
    	{
    		MyString = Browse.GetPathName();
    		cheminImage = static_cast <LPCTSTR>(MyString);
     
    		affiche.LoadImg(MyString);
    		affiche.Invalidate();
        }
    cheminImage est une variable membre de la classe et a un type "const char*", le chemin selectionner est bien enregistrer dans Mystring, mais la convertion en const char* ne marche pas, il n'y à rien dans ma variable???

    J'ai essayer plein de truc, mais rien n'y fais. Quelqu'un pourrai me donner une solution qui marche à tout les coup et qui soit sure?

    merci beaucoup.

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    est ce que tu es en unicode ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    unicode?? moi connais pas!!

  4. #4
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    tu utilises quelle version de vc ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    j'utilise Vc++.net 2003

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Si

    Il Tu as deux solutions:
    1. Dans les propriétés de ton projet, régler les options pour désactiver l'unicode.
      Je ne sais pas où c'est sous visual 2003, mais sous 2005, c'est dans "project properties" -> "Configuration properties" -> "General" -> Entrée "Character Set" -> Choisir "Use multi-byte character set".
    2. Ou bien, tu remplaces tous tes char par des TCHAR, pour développer un programme qui marche aussi bien en multi-byte qu'en UNICODE.
      Ainsi, tu déclares cheminImage en "const TCHAR *" (ou en LPCTSTR, ce qui est exactement la même chose)

  7. #7
    Membre régulier Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Points : 111
    Points
    111
    Par défaut CString to char *
    Bonjour,
    Est ce que t'as essayé ceci : A bientôt

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    c_str() est une fonction membre des std::string de la STL, pas des CString MFC...
    Et la question n'est pas là : Le problème réside dans le conflit ANSI/Unicode...

  9. #9
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Hello,

    Citation Envoyé par Rafoo
    Bonjour,

    Je sais que ce topic est vu et revu, mais je ne trouve rien qui marche dans mon cas...

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    CString OpenFilter, MyString;
     
    OpenFilter = "Images(*.bmp)|*.bmp|All Files (*.*)|*.*||";
     
    CFileDialog Browse(
          TRUE,
          NULL,
          NULL,
          OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
          OpenFilter,                       // filter
          0,0);               // the parent window
     
    if(Browse.DoModal()==IDOK)
    	{
    		MyString = Browse.GetPathName();
    		cheminImage = static_cast <LPCTSTR>(MyString);
     
    		affiche.LoadImg(MyString);
    		affiche.Invalidate();
        }
    cheminImage est une variable membre de la classe et a un type "const char*", le chemin selectionner est bien enregistrer dans Mystring, mais la convertion en const char* ne marche pas, il n'y à rien dans ma variable???
    Utilise la fonction membre GetBuffer() de la classe CString (elle renvoie un pointeur sur TCHAR (LPTSTR) ). Elle est aussi susceptible de lever une exception CMemoryException.
    Change le type de cheminImage en const TCHAR *, le type TCHAR mappant automatiquement soit sur le type char (rien de défini ou MBCS (MultiByte Character Sequences)) ou wchar_t (char étendu utilisé en unicode (UNICODE défini) ) suivant ce qui est défini.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cheminImage = static_cast<LPCTSTR>( MyString.GetBuffer(0) );
    + 2 articles intéressants :
    http://www.codeproject.com/string/cppstringguide1.asp
    http://www.codeproject.com/string/cppstringguide2.asp

    A+

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Pas besoin de GetString() pour utiliser une CString :
    static_cast <LPCTSTR>(MyString); marche parfaitement (même si quand je suis pareusseux, je préfère écrire LPCTSTR(MyString))

Discussions similaires

  1. CString vers const char*
    Par raphchar dans le forum MFC
    Réponses: 3
    Dernier message: 28/06/2010, 10h03
  2. Réponses: 8
    Dernier message: 07/05/2008, 09h57
  3. Convertir CString en const char*: ca marche pas
    Par MDiabolo dans le forum Visual C++
    Réponses: 12
    Dernier message: 21/11/2006, 18h10
  4. [MFC - ATL] CString vers const char *
    Par VitamineC dans le forum MFC
    Réponses: 2
    Dernier message: 12/04/2006, 18h56
  5. Conversion CString en const char*
    Par LRobi dans le forum MFC
    Réponses: 8
    Dernier message: 19/07/2005, 12h12

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