none
MessageBox Funktion geändert? RRS feed

  • Frage

  • Hallo zusammen,

    bislang habe ich mit VC++6.0 gearbeitet und bin auf VC++2010 umgestiegen.

    Leider funktioniert die MessageBox nicht mehr wie gewohnt. Unter 6.0 konnte ich eingeben: MessageBox ("Hello World");

    und die entsprechende MessageBox wurde ausgegeben.

    Bei der VC++2010 erhalte ich beim selben Befehl folgende Fehlermeldung:

    c:\message\messagedlg.cpp(160): error C2664: 'CWnd::MessageBoxW': Konvertierung des Parameters 1 von 'const char [12]' in 'LPCTSTR' nicht möglich
    Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    Fehler beim Erstellen

     

    Kann mir jemand ein funktionierendes Codebeispiel für eine einfache Ausgabe nennen?

    Danke,

    Michael

     

    Freitag, 16. September 2011 11:06

Antworten

  • Da hat sich nix wesentliches geändert... das Problem ist, dass Du Dich immer noch nicht mit TCHAR auskennst... obwpohl dies schon seit VC+4 (oder noch früher) vorhanden ist...

    Default-Projekte werden seit VS2005 als Unicode-Projekte angelegt, was ja auch Sinn macht...


    Jochen Kalmbach (MVP VC++)
    Freitag, 16. September 2011 12:51
  • Danke für die Antwort. Ich werde jetzt suchen, ob ich zu AfxMessageBox herausfinde, wie diese parmetriert wird.

    Es gibt das Internet und wenn man in der MSDN Suche AfxMessageBox suchst, hast Du sofort einen Treffer.

    Die MessageBox habe ich aus dem Buch VC++ in 21 Tagen (Version 6.0). Daher habe ich die Messagebox mit der angebenen Parametrierung.

    Dann gehört für mich das Buch in die Tonne.
     > In den Standardlehrbüchern zu C++ finde ich ausschließlich AnsiCode, also char, int, double .... Von MS spezifischen Codes wie CString, TCHAR usw. habe ich praktisch keine Kenntnisse.

    Ach! Und kein wchar_t? Das ist doch auch ANSI!

    TCHAR ist nichts anderes als ENTWEDR char ODER wchar_t je nach Compiler Einstellung.

    Ich weiß noch nicht einmal was Unicode oder MBCS heißt.

    Dann hör auf zu Programmieren und lerne es.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Sonntag, 18. September 2011 17:38

Alle Antworten

  • Da hat sich nix wesentliches geändert... das Problem ist, dass Du Dich immer noch nicht mit TCHAR auskennst... obwpohl dies schon seit VC+4 (oder noch früher) vorhanden ist...

    Default-Projekte werden seit VS2005 als Unicode-Projekte angelegt, was ja auch Sinn macht...


    Jochen Kalmbach (MVP VC++)
    Freitag, 16. September 2011 12:51
  • Danke für die Antwort.

    Ich habe Ansi C++ und früher nur mit Konsole Anwendungen gearbeitet. Seitdem arbeite ich oberflächlich mit MFC Projekten und möchte Ausgaben mit der Messagebox machen.

    Mir sagt weder der Begriff TCHAR, Default Projekt und Unicode Projekt irgendetwas. Diese Dinge interessieren mich aber auch nicht, da dies MS Standard ist.

     

    Ich wäre dankbar, wenn mir jemand den Quellcode für eine einfache MessageBox Hallo Welt Ausgabe verraten könnte. Die Onlinehilfe von MS fand ich nicht hilfreich.

    Freitag, 16. September 2011 13:43
  • Das Problem ist ja nur, dass Deine Frage ungefähr alle x-Tage wieder kommt....
    Dabei verstehe ich bis heute noch nicht, was so schwierig dabei ist im Google "MessageBox" einzugeben, den ersten Treffer auszuwählen und das Beispiel dort rauszukopieren....
     http://msdn.microsoft.com/en-us/library/ms645505(VS.85).aspx


    Jochen Kalmbach (MVP VC++)
    Freitag, 16. September 2011 19:38
  • Hier der Beispielcode aus deinem Beispiel: 

     

      int msgboxID = MessageBox(
            NULL,
            (LPCWSTR)L"Resource not available\nDo you want to try again?",
            (LPCWSTR)L"Account Details",
            MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
        );

    Hier die Fehlermeldung:

    1>  MessageDlg.cpp
    1>c:\temp\test\message\message\messagedlg.cpp(165): error C2660: 'CWnd::MessageBoxW': Funktion akzeptiert keine 4 Argumente
    1>
    1>Fehler beim Erstellen

     

    Bin also noch nicht viel weiter. Leider gibts die F1 Taste nicht, die mir dabei weiterhilft. Unter VC++6.0 lief alles ohne Probleme und jetzt unter VC++2010 laufen die alten Programmecodes nicht mehr richtig.

    Samstag, 17. September 2011 10:47
  • 1. Stimmt. Du bist in einer CWnd Funktion. Da hat Messagebox keine 4 Parameter, sondern nur 3.

    2. Die Verwendungvon CWnd::MessageBox innerhalb der MFC ist gefährlich. Korrekt wäre die Verwednung AfxMessageBox! Nur diese Funktion garantiert, dass die MFC mit bekommt, dass eine Applikation modal wird.

    3. Scheinbar hast Du immer noch nciht verstanden, was Jochen Dir bzgl. Unicode und MBCS sagen will. Warum hast Du diese unsäglichen casts in Deinem Code?

    4. Besagter Code würde auch in VC 6.0 mit falschen Compiler Einstellungen und der falschen Nutzung von char/wchar_t/TCHAR genauso wenig funktionieren. Das liegt ausschließlich an Dirund nicht an VS-2010 und es ist auch nicht komplizierter geworden.

     


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Samstag, 17. September 2011 13:44
  • Danke für die Antwort. Ich werde jetzt suchen, ob ich zu AfxMessageBox herausfinde, wie diese parmetriert wird.

    Die MessageBox habe ich aus dem Buch VC++ in 21 Tagen (Version 6.0). Daher habe ich die Messagebox mit der angebenen Parametrierung. In den Standardlehrbüchern zu C++ finde ich ausschließlich AnsiCode, also char, int, double .... Von MS spezifischen Codes wie CString, TCHAR usw. habe ich praktisch keine Kenntnisse.

    Ich weiß noch nicht einmal was Unicode oder MBCS heißt.

    Habe recherchiert:

    http://social.msdn.microsoft.com/Forums/de/visualcplusde/thread/dc79d0d3-d60e-4961-a0fc-d8a6956737a8

    int  a= AfxMessageBox(_T("Hallo"));

    Habe auch noch einiges dazu zu Unicode und MBCS gelesen. Das haben wir in der Schule nie gelernt.

    Samstag, 17. September 2011 14:02
  • Danke für die Antwort. Ich werde jetzt suchen, ob ich zu AfxMessageBox herausfinde, wie diese parmetriert wird.

    Es gibt das Internet und wenn man in der MSDN Suche AfxMessageBox suchst, hast Du sofort einen Treffer.

    Die MessageBox habe ich aus dem Buch VC++ in 21 Tagen (Version 6.0). Daher habe ich die Messagebox mit der angebenen Parametrierung.

    Dann gehört für mich das Buch in die Tonne.
     > In den Standardlehrbüchern zu C++ finde ich ausschließlich AnsiCode, also char, int, double .... Von MS spezifischen Codes wie CString, TCHAR usw. habe ich praktisch keine Kenntnisse.

    Ach! Und kein wchar_t? Das ist doch auch ANSI!

    TCHAR ist nichts anderes als ENTWEDR char ODER wchar_t je nach Compiler Einstellung.

    Ich weiß noch nicht einmal was Unicode oder MBCS heißt.

    Dann hör auf zu Programmieren und lerne es.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Sonntag, 18. September 2011 17:38
  • Hallo Michael3322,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Dienstag, 27. September 2011 14:02