Tutorial von win-api.de



  • Hallo erstmal ich wollte euch mal von einem Fehler berichten, der bei mir aufgetreten ist.
    Zuerst: Ich nutze Microsoft Visual C++ 2008 Express Edition und das Tut von win - api .de / das erste WinAPI Programm.
    Ich erhalte folgenden Fehler :

    error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [137]' in 'LPCWSTR' nicht möglich
    

    bei folgendem Code:

    #define STRICT
    #include <iostream>
    #include <windows.h>
    
    const char  szWitz[] = "\"Ich steh' schwer auf Umweltschutz\", sagt Peter.\n"
                           "\"Ich werfe zum Beispiel alte U-Bahn-Fahrscheine nie weg,\n"
                           "sondern benutze sie mehrmals.\"";
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
    
     int iAntwort = MessageBox(NULL, szWitz, "Ha, ha, ha, ha...",
                                       MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);
    
    if (IDOK == iAntwort)
       {
          MessageBox(NULL, "Ja, ich finde den Witz auch Ok...",
                           "Sie haben auf Ok gedrückt",
                           MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
       }
    
    else if (IDCANCEL == iAntwort)
       {
          MessageBox(NULL, "Ja, warum haben sie denn auf Abbrechen gedrückt?\n"
                           "Hat ihnen der Witz etwa nicht gefallen?",
                           "Sie haben auf Abbrechen gedrückt",
                           MB_ICONINFORMATION  | MB_OK | MB_DEFBUTTON1);
       }
    
        return 0;
    }
    

    Der Fehler tritt drei mal in den Zeilen : 15, 22, 31 auf.
    Ich hoffe ihr könnt mir sagen was ich falsch gemacht habe.
    Euer Hihi



  • die neuen VCs kompilieren standardmäßig mit UNICODE an. das musste in den optionen mal ausstellen.



  • Kannst bitte noch erläutern wo genau ich das einstellen muss?
    Hihi





  • Boah Danke.
    Hihi



  • Der Vollständigkeit halber...

    Wenn du mit Unicode arbeiten willst, musst du deinen Strings ein L voranstellen, also z.B. so:
    L"Mein Unicode-String"

    Dann handelt es sich nicht um 8-Bit chars, sondern um 16-Bit w_chars.



  • Wenn man mit VS arbeitet, sollte man immer TCHAR verwenden...
    Also für String-Literale:

    _T("String Literal")
    

    Dann geht es sowohl mit ANSI als auch UNICODE.


Anmelden zum Antworten