cloidnerux hat geschrieben:Also ich hab folgendes Problem:
Ich versuche mich ja gerade an OpenGL und ich bekomme so ein Porgramm nicht kompiliert.
Platform. Windows Xp-32Bit
IDE: VC++ 2005 (Ich weiß das ihr das nciht so gut findet)
Fehler:
Code: Alles auswählen
c:\dokumente und einstellungen\jack\eigene dateien\visual studio 2005\projects\opengltest\opengltest\main.cpp(262) : error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [31]' 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.
So, jezt werdet ihr sagen: mach doch das reinterpret_cast..., das will ich aber nicht.
Das aus folgendem Grund:
Anderes Programm, wieder VC++,
selber code, aber das Problem nicht??????
Der code ist:
Code: Alles auswählen
MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
Der Fehler bezieht sich auf das "Failed..." und ncoh auf ein Paar andere Strings, die hier aber nebensache ist.
Warum wird bei einem Projekt der fehler nicht gemeldet, bei dem anderen projekt, selber Headerdateien?
Die Sache ist ganz einfach: Du übergibst einen Zeiger auf ein konstantes Char- Array. Die Funktion erwartet aber den Parameter "LPCWSTR", was auf Microsoftisch "Long pointer to constant wide string" bedeutet. Das ist also ein Zeiger auf ein konstantes
wchar_t Array, das ist ein Datentyp für Zeichen indem auch Unicode Zeichen platz finden.
Der Grund dass es bei einem Funktioniert und beim anderen nicht ist, dass wahrscheinlich je nach Projekteinstellungen (oder deklarationen in header) entweder LPCWSTR selbst oder die Funktion nicht gleich deklariert ist.
Die Lösung deines Problems ist entweder die Funktion von Xin zu verwenden (ich nehme an das ist eine narrow- char variante der gleichen funktion), oder aber, was eigentlich eleganter wäre:
Setz deine Strings in TEXT makros, das sieht so aus: TEXT("Failed To Register The Window Class.")
Das Makro bewirkt, dass in in Unicode Builds daraus ein wide- char Array wird, und in normalen builds ein narrow- char Array, und das würde genau dein Problem lösen.
Wenn du selbst bestimmen willst, dass das ein Widechar array werden soll, dann setz ein "L" vor oder nach den string, das sieht so aus L"Failed To Register The Window Class." oder "Failed To Register The Window Class."L
hoffe das hat geholfen.
mfg, fat-lobyte
Haters gonna hate, potatoes gonna potate.