Unütze Konvertierung?

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Unütze Konvertierung?

Beitrag von cloidnerux » Mi Feb 11, 2009 5:12 pm

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?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Unütze Konvertierung?

Beitrag von Dirty Oerti » Mi Feb 11, 2009 8:52 pm

Ich kann nur mutmaßen, da ich den Code des Fehlerverursachenden Programms nicht kenne.

Fehler tritt nicht auf, wenn du den Text direkt in den Parameter in Form von (...,"Text...",...) schreibst.
Fehler tritt auf, wenn du es in der Form (...,text_str,...) schreibst.

Liege ich damit richitg?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Unütze Konvertierung?

Beitrag von cloidnerux » Mi Feb 11, 2009 8:54 pm

Nein.
Der Fehler triit bei einem Projekt auf, bei einem Anderen nicht, obwohl beide identische Compileraufrufe haben.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Unütze Konvertierung?

Beitrag von Dirty Oerti » Mi Feb 11, 2009 9:00 pm

Wie sieht denn der genaue Code aus?
Dann kann ich dir vielleicht helfen...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Unütze Konvertierung?

Beitrag von cloidnerux » Mi Feb 11, 2009 9:06 pm

Code: Alles auswählen

MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
Es ist nur so, das ich unter MS VC++ Express ein nues Windows Projekt gestartet habe, die Messagebox aufgerufen und dann habe ich diese Fehlermeldung bekommen.
Bei einem Anderen projekt nachgeschaut, selbe Header, selbe Funktion, aber kein Fehler??????
Also in den Projekteinstellungen nachgeschaut und angeglcihen, immernoch der Fehler.
Das ist zum Mäuse melken.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Unütze Konvertierung?

Beitrag von Xin » Mi Feb 11, 2009 10:08 pm

cloidnerux hat geschrieben:

Code: Alles auswählen

MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
Es ist nur so, das ich unter MS VC++ Express ein nues Windows Projekt gestartet habe, die Messagebox aufgerufen und dann habe ich diese Fehlermeldung bekommen.
Bei einem Anderen projekt nachgeschaut, selbe Header, selbe Funktion, aber kein Fehler??????
Also in den Projekteinstellungen nachgeschaut und angeglcihen, immernoch der Fehler.
Das ist zum Mäuse melken.
Versuch MessageBoxA().
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Unütze Konvertierung?

Beitrag von fat-lobyte » Do Feb 12, 2009 11:28 am

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.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Unütze Konvertierung?

Beitrag von cloidnerux » Do Feb 12, 2009 5:30 pm

OK, werde es mal versuchen.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten