Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 20.07.2007, 11:57 Titel: Merkwürdige Compiler-Fehlermeldung |
|
|
Hi,
ehm ich habe ein Problem:
Könnt ihr mir sagen warum mein Compiler auf einmal diese Fehlermeldung anzeigt:
Code: | .\main.cpp(41) : error C2440: '=': 'const char [8]' kann nicht in 'LPCWSTR' konvertiert werden |
bei der Zeile: ???
CPP: | wc.lpszClassName = "Fenster"; |
Ich meine vor ein paar Tagen ging das noch ohne Probleme.
Habe MS VC++
Habe dann mal gegooglet und was gefunden:
Zitat: | <tchar.h>" einbinden, und dann jeden String, bei dem die Fehlermdlung kommt, in Klammern setzen und ein _T davoschreiben, also z.B. _T("Test") |
Habe ich auch gemacht, die fehlermeldung ist weg, aber jetzt kommt die gleiche Fehlermeldung bei CreateWindowEx auf dem letzten Parameter, aber da steht bei mir NULL ???
Was soll ich jetzt machen?? _________________ Besucht meine Seite:
www.cpparchiv.dl.am |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 20.07.2007, 12:06 Titel: |
|
|
unicode ist das stichwort..
CPP: | wc.lpszClassName = L"Fenster"; |
immer schön das L vor die zeichenkette..
Oder aber in der Projektkonfiguration in VS unicode ausstellen und den herkömmlichen code nehmen.. oder das mit TCHAR..
zum letzten Problem:
Der letzte parameter von CreateWindowEx ist der
==> LPVOID lpParam
da sollte er nicht meckern.. Bist du dir sicher, dass sich die meldung nicht auf den erste und oder zweiten parameter bezieht? |
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 20.07.2007, 12:16 Titel: |
|
|
Ja ich bin mir sicher.
Aber was ich merkwürdig finde ist das ich den Code noch vorgestern ohne Probleme compilieren konnte ich hatte gar nichts verändert!!
Und der Fehler kommt jetzt bei all meinen win32 Projekten, die aber vor kurzem noch ohne probleme funktionierten -.-...
edit:// Problem gelöst:
Für alle dennen das auch irgendwann passiert hier die lösung:
Projekt-Eigenschaften->Konfigurationseigenschaften->Allgemein:
Zeichensatz auf Multi-Byte-Zeichensatz einstellen.
Ich habe aber keine Ahnung wiso sich das umgestellt hat, habe da nähmlich nie was verändert-.- _________________ Besucht meine Seite:
www.cpparchiv.dl.am |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 20.07.2007, 12:23 Titel: |
|
|
Zeigmal die Zeile und die Fehlermeldung. |
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 20.07.2007, 12:35 Titel: |
|
|
Das war die gleiche Fehlermeldung
Zitat: | .\main.cpp(41) : error C2440: '=': 'const char [8]' kann nicht in 'LPCWSTR' konvertiert werden |
beim letzten Parameter von CreateWindowEx
hat sich aber inzwischen erledigt^^
Siehe meinen letzten Post _________________ Besucht meine Seite:
www.cpparchiv.dl.am |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 20.07.2007, 12:36 Titel: |
|
|
Glaub ich dir nicht das es beim letzten Parameter von CreateWindowEx war. Und die Lösung die du hast umgeht höchstens das Problem. Auf der sicheren Seite wärst du wenn du dich über die Thematik informieren würdest. |
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 20.07.2007, 12:42 Titel: |
|
|
Ach quatsch hast recht^^
Ich habs grade nochmal ausprobiert und das stand
Code: | .\main.cpp(41) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [5]' in 'LPCWSTR' nicht möglich
|
Doch wenn ich doppelt drauf geklickt habe sprang er zum letzten parameter -.-
Naja egal jetzt weiß ich ja woran es lag^^ _________________ Besucht meine Seite:
www.cpparchiv.dl.am |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 20.07.2007, 13:09 Titel: |
|
|
ich fass das nochmal für dich zusammen, RebornX, weil ich das Gefühl hab das du zwar die Lösung kennst, aber nicht den Grund (wie david schon gesagt hat):
es gibt zwei verschiedene Zeichensätze: ASCII und UNICODE
welchen von beiden dein Compiler grad fordert kannst du daran festellen ob UNICODE definiert wurde (#ifdef...)
ist der Unicode Zeichensatz eingestellt erwarten alle Windows-Funktionen (u.a. DX) einen Unicode string
diese Strings sehen so aus: CPP: | // c-string
wchar_t ustring[];
// c++-string
std::wstring
// const string
L"dies ist ein unicode string" |
die ASCII Entsprechungen sind char[], std::string und "..."
der Unterschied ist, dass UNICODE 2 Bytes / Zeichen an Speicher belegt und somit 65536 versch. Zeichen bietet und der ASCII Zeichensatz mit 1 Byte / Zeichen 256 versch. Zeichen erlaubt (ungf., gibt ja auch sonderzeichen wie newline).
willst du unabhängig davon Programmieren (also sowohl das Eine als auch das Andere erlauben, wie in der WinAPI) solltest du TCHAR und TEXT( "..." ) benutzen (evtl. #include <tchar.h>). Diese sind so definiert dass sie sich bei UNICODE zu wchar_t und L"..." auflösen und sonst zu char und "..."
Gruß DXer |
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 20.07.2007, 13:39 Titel: |
|
|
Ok, ich bleibe aber erstmal bei ASCII, weil sonst würde mich das alles wieder verwirren . Momentan brauche ich auch nur 256 Zeichen, denke ich mal.
Wieso ist den das für Winapi so wichtig, das man beides hat? _________________ Besucht meine Seite:
www.cpparchiv.dl.am |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 20.07.2007, 14:57 Titel: |
|
|
naja, Unicode macht flexibel und kann hilfreich sein wenn man mal bestimmte zeichen braucht. Die WinAPI muss beides unterstützen, weil es immer schlecht ist dem User und seiner App einen bestimmten Zeichensatz aufzufwingen. So können z.B. Japaner und Chinesen Unicode auswählen um auch andere lateinische Zeichen zu benutzen, und auf der anderen Seite manche Leute Ascii wählen, wenn sie ein bestimmtes Memory-Usage Konzept verfolgen. DirectX, OpenGL u.a. unterstützen z.B. auch beides
Gruß DXer |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
|
Nach oben |
|
|
|