JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=3dcf9fa247bd85b168518c66052e2f05Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Merkwürdige Compiler-Fehlermeldung

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 11:57    Titel: Merkwürdige Compiler-Fehlermeldung Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 12:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 12:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 12:23    Titel: Antworten mit Zitat

Zeigmal die Zeile und die Fehlermeldung.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 12:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 12:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 12:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 13:09    Titel: Antworten mit Zitat

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):

Arrow es gibt zwei verschiedene Zeichensätze: ASCII und UNICODE
Arrow welchen von beiden dein Compiler grad fordert kannst du daran festellen ob UNICODE definiert wurde (#ifdef...)
Arrow ist der Unicode Zeichensatz eingestellt erwarten alle Windows-Funktionen (u.a. DX) einen Unicode string
Arrow diese Strings sehen so aus:
CPP:
 // c-string
wchar_t ustring[];
// c++-string
std::wstring
// const string
L"dies ist ein unicode string"

Arrow die ASCII Entsprechungen sind char[], std::string und "..."
Arrow 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).
Arrow 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 13:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 14:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 20.07.2007, 17:11    Titel: Antworten mit Zitat

Windows 98 hatte z.B. keine natürliche Unterstützung für Unicode. Es war also relativ schwierig Unicode-Anwendungen für Win98 zu schreiben.

oder man benutzt das "Microsoft Layer for Unicode on Windows 95/98/Me Systems"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum