Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème MessageBox

Sujet résolu
    4 août 2007 à 21:16:49

    Bonjour,

    Je débute sous Visual C++ (avec Visual C++ 2005 express) et j'aimerai afficher une MessageBox qui affiche une valeur pour vérification.
    Dans le cas présent j'essaye de lire la première ligne d'un fichier et l'afficher, mais ça ne marche pas. Voici un extrait de mon code :

    ifstream fichier;
    fichier.open("Test.txt", ios::in);
    if(fichier)
    {       
            string contenu;
            getline(fichier, contenu);
            MessageBox(0,contenu,"Lecture fichier",0);
            ExitProcess(0);
    }
    else
    {
            MessageBox(0,"C'est un échec","Lecture fichier",0);
            ExitProcess(0);
    }
    fichier.close();


    Et le compilateur me dit:
    error C2664: 'MessageBoxA' : impossible de convertir le paramètre 2 de 'std::string' en 'LPCSTR'
            Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
     


    Est ce que quelqu'un pourrait me dire qu'est ce qui ne va pas ?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      4 août 2007 à 22:19:23

      a mon avis c'est la fonction string qui est incompatible avec la fonction getline mai je sui aussi debutan ^^ et je ne me suis pas encor pencher sur la lecture de fichier via C++
      • Partager sur Facebook
      • Partager sur Twitter
        4 août 2007 à 22:57:13

        je pense pas, c'est simplement une mauvaise configuration du projet ;), si tu veux pas le configurer dans le MsgBox met: L"Lecture fichier" au lieu de "Lecture fichier" sinon tu vas dans:
        Project -> Properties -> Configuration Properties -> General, change l'option "Character Set" en "Use Multi-Byte Character Set" ;)
        • Partager sur Facebook
        • Partager sur Twitter
          4 août 2007 à 23:38:27

          essay d'extraire le tableau de char de ta variable string.
          • Partager sur Facebook
          • Partager sur Twitter
            5 août 2007 à 3:15:10

            Tu peux faire comme valdion dit:
            MessageBox(0,(LPCSTR) contenu.c_str,"Lecture fichier",0);


            Citation : countag

            je pense pas, c'est simplement une mauvaise configuration du projet ;), si tu veux pas le configurer dans le MsgBox met: L"Lecture fichier" au lieu de "Lecture fichier" sinon tu vas dans:
            Project -> Properties -> Configuration Properties -> General, change l'option "Character Set" en "Use Multi-Byte Character Set" &#59;)


            L'erreur ne vient pas de "Lecture fichier" mais de la std:string. Changer la propriéter de son projet ne changera rien a son problème.
            • Partager sur Facebook
            • Partager sur Twitter
              5 août 2007 à 8:36:29

              Citation : [Kansuu]

              Tu peux faire comme valdion dit:

              MessageBox(0,(LPCSTR) contenu.c_str,"Lecture fichier",0);



              Citation : countag

              je pense pas, c'est simplement une mauvaise configuration du projet ;), si tu veux pas le configurer dans le MsgBox met: L"Lecture fichier" au lieu de "Lecture fichier" sinon tu vas dans:
              Project -> Properties -> Configuration Properties -> General, change l'option "Character Set" en "Use Multi-Byte Character Set" &#59;)


              L'erreur ne vient pas de "Lecture fichier" mais de la std:string. Changer la propriéter de son projet ne changera rien a son problème.



              je me demande comment tu peux être aussi sur de toi :/ . LPCTSTR n'est pas un vrai type. Il signifie const char * par défaut, et const whcar_t * si UNICODE est défini. Sous visual studio par défaut les convertion LPCTSTR -> char * génére ce genre d'erreur, il faut donc configurer son projet pour permettre ces conversions, c'est pour cela que je lui propose de mettre un L"" car le L est une macro qui converti les chaines en unicode, sinon la configuration du projet proposé automatise ceci sans besoin d'utiliser L""
              • Partager sur Facebook
              • Partager sur Twitter
                5 août 2007 à 18:47:23

                Merci pour vos conseils, malheureusement j'ai essayé vos proposition et rien ne fonctionne. Avec :
                MessageBox(0,contenu,L"Lecture fichier",0);

                J'obtiens :
                Principal.cpp
                d:\visual studio 2005\projects\test\principal.cpp(145) : error C2664: 'MessageBoxA' : impossible de convertir le paramètre 2 de 'std::string' en 'LPCSTR'
                        Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé

                Et avec:
                MessageBox(0,(LPCSTR) contenu.c_str,"Lecture fichier",0)

                J'obtiens :

                Principal.cpp
                d:\visual studio 2005\projects\test\principal.cpp(146) : error C2440: 'cast de type' : impossible de convertir de 'const char *(__thiscall std::basic_string<_Elem,_Traits,_Ax>::* )(void) const' en 'LPCSTR'
                        with
                        [
                            _Elem=char,
                            _Traits=std::char_traits,
                            _Ax=std::allocator
                        ]
                        Aucun contexte dans lequel cette conversion est possible


                Ces résultats du compilateur vous disent-ils quelque chose, car pour moi c'est limite du chinois.
                • Partager sur Facebook
                • Partager sur Twitter
                  5 août 2007 à 19:32:26

                  Je pense que tu as pas du suivre les consignes :) , bon alors :

                  - Va dans Project -> Properties -> Configuration Properties -> General, change l'option "Character Set" en "Use Multi-Byte Character Set"

                  - Ensuite tu met: MessageBox(0, contenu.c_str(), "Lecture fichier", 0);

                  et maintenant ca devrait marcher :) (j'ai testé chez moi ca marche)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 août 2007 à 21:21:21

                    Merci bien Countag, ça marche :) ! ! !
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème MessageBox

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown