WinAPI Messagbox - Compilerfehler 2664 unter Visual c++ 2005 Express und PSDK



  • Schönen guten Morgen,
    hab heute angefangen mich mit der kostenlosen Expressversion von Visual C++ herumzuschlagen und ich verzweifel langsam.
    Ich habe die komplette PSDK heruntergeladen und installiert, hab
    die Express Dateien, so wie in der Anleitung hier im Forum beschrieben,
    abgeändert um Win32 Anwendungen erstellen zu können. Habe alle Include, Libs
    und sonstige Dateien eingebunden und trozdem kam folgender Fehler:

    c:\users\karp\documents\visual studio 2005\projects\win32-testprojekt\win32-testprojekt\main.cpp(12) : error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [28]' in 'LPCWSTR' 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.
    

    Mein Code sieht sehr banal aus:

    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance,
    				   LPSTR lpcmdline, int ncmdshow)
    {
    	MessageBox(0, "Mein erster Messagebox-Text",  // Inhalt der Dialogbox (TEXT)
    				  "Hallo World Messagebox",       // Titelleiste
    				  MB_OK | MB_ICONEXCLAMATION);	  // OK-Button
    
    return 0;
    }
    

    Bitte um Hilfe, hab noch ein älteren C++ Compiler hier, wo die Messagebox tadellos aufgerufen wird.

    Danke im Vorraus 🙂

    P.S: Forensuche hat mir den Fehler nicht nahgebracht, bzw. nachvollziehbar 😕
    Bin fast absoluter Neuling, habe mich vor einiger Zeit mit Visual Basic auseinandergesetzt und dementsprechend ist C++ also für mich Neuland.



  • Per default wird ab VC2005 alles mit UNICODE übersetzt. D.h. die Parameter sind (wie schon immer LPCTSTR) und benötigen jetzt ein wchar_t-String!
    =>

    #include <windows.h>
    #include <tchar.h>
    
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance,
                       LPSTR lpcmdline, int ncmdshow)
    {
        MessageBox(0, _T("Mein erster Messagebox-Text"),  // Inhalt der Dialogbox 
                      _T("Hallo World Messagebox"),       // Titelleiste
                      MB_OK | MB_ICONEXCLAMATION);      // OK-Button
    
    return 0;
    }
    


  • Hey super Dank für die schnelle Antwort, hab ich wohl übersehen im angepinnten Thread hier über Visual C++.

    Ich hab jetzt allerdings einen anderen Fehler

    MSVCRTD.lib(crtexe.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion "___tmainCRTStartup".
    C:\Users\Karp\Documents\Visual Studio 2005\Projects\Win32-Testprojekt\Debug\Win32-Testprojekt.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    

    Würde mich über eine Antwort natürlich wieder freuen 😉
    mfg
    Karp



  • Du musst in den Projekteinstellungen unter Linker als Subsystem "Windows" auswählen. Bisher hast du es wahrscheinlich auf "Konsole" stehen.

    Zum Unicode: Du kannst auch "#undef UNICODE" an den Anfang des Programms schreiben, um die ANSI-Versionen benutzen zu können.



  • ChristianK schrieb:

    Du musst in den Projekteinstellungen unter Linker als Subsystem "Windows" auswählen. Bisher hast du es wahrscheinlich auf "Konsole" stehen.

    Zum Unicode: Du kannst auch "#undef UNICODE" an den Anfang des Programms schreiben, um die ANSI-Versionen benutzen zu können.

    Danke schön 😉 Vielen Dank.
    Visual C++ ist schon sehr eigenartig. Diese ganzen Einstellungssachen habe ich bei
    meinem alten Compiler nicht gebraucht. Allerdings ist der auch nicht mal halb
    so schön und übersichtlich wie die Expressversion.

    Jetzt funktionierts, vielen Dank nochmal 😉
    Kann ich endlich weitermachen 😃

    Edit:
    Was würdet ihr mir denn raten, Unicode oder Ansicode? Ist wahrscheinlich
    Anssichtssache oder? Also womit ich besser klar komme?



  • Besser klarkommen wirst Du vermutlich mit ANSI.
    Empfehlen würde ich Dir aber zu UNICODE, dann geht es auch mit *nicht deutschen* Sprachen...


Anmelden zum Antworten