getCppKenntnisse() Geschrieben 7. Oktober 2009 Geschrieben 7. Oktober 2009 Hi Comm., ich habe ein Problem, am besten erstmal der betroffene Code: MessageBox(NULL,"Soll im Vollbildmodus gestartet werden?", "Vollbilmodus gewünscht?",MB_YESNO|MB_ICONQUESTION) Meine includes: #include <windows.h> #include <gl\glu.h> #include <gl\gl.h> #include <gl\glaux.h> Ich arbeite mir MS Visuall Studio 2008, beim kompilieren bekomme ich folgende Fehlermeldung: c:\users\media\documents\visual studio 2008\projects\open_gl_0\open_gl_0\main.cpp(110) : error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [40]' 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. Wie kann ich den Fehler umgehen? Also ich meine wie kann ich dem Compiler(oder der Klasse?) beibringen, dass der Übergebene Parameter kein char array sondern ein LPCWSTR ist? ich nehme mal an, dass die Klasse MessageBox in windows.h steht, aber dort habe ich Sie nicht gefunden. Über jede hilfe dankbar mfg Zitieren
Klotzkopp Geschrieben 7. Oktober 2009 Geschrieben 7. Oktober 2009 Die Windows-API bietet fast alle Funktion, die mit Strings arbeiten, in zwei Varianten: Multi-Byte und Unicode Es gibt eigentlich keine Funktion namens MessageBox. Es gibt MessageBoxA und MessageBoxW. MessageBox ist nur ein Makro, das je nach Projekteinstellungen entweder auf MessageBoxA (Multi-Byte) oder MessageBoxW (Unicode) verweist. Die Unicode-Versionen haben die Eigenschaften, dass Strings als LP[C]WSTR erwartet werden. In Visual C++ 2008 ist Unicode die Voreinstellung. Du kannst das Problem also auf drei Arten lösen: Stell die Projekteinstellung von Unicode auf Multi-ByteBenutz Wide Char-Literale und WCHAR statt charRuf explizit MessageBoxA auf (das ist die schlechteste Möglichkeit). Wenn dein Programm beide Einstellungen unterstützen soll, kannst du TCHAR und die dazugehörigen Funktionen benutzen. Zitieren
getCppKenntnisse() Geschrieben 8. Oktober 2009 Autor Geschrieben 8. Oktober 2009 Okay, die Multi-Code umstellung hat geklappt. Vielen Dank! Nur noch als Interessen-Frage: Wie kann ich einen LP[C]WSTR übergeben, bzw. initialisieren? Zitieren
TDM Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 Nur noch als Interessen-Frage: Wie kann ich einen LP[C]WSTR übergeben, bzw. initialisieren? _T-Makro (Vermutung) CA2W-Makro ein 'L' vor die Anführungsstriche MultiByteToWideChar Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.