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 weitermachenEdit:
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...