WndProc in klasse?
-
hilfe! ^^"
(sorry für doppelpost)
-
Woah - habs hingekriegt, hurrrrrrrraaaaaaa!!!!!!!!!!!!!!!!!
hatte aus versehen in der Klassendefinition und in der funktionsdefinition ein WNDCLASSEX wcex stehen, lag doch nicht am this zeiger, muhaha. Danke an alle nochmal^^
-
so - ist zwar jetzt ein 4fach Post, aber es gibt immer noch ein Problem:
Zwar lässt sich alles wunderbar kompilieren und starten, aber wenn ich versuche, irgendeine Nachricht zu verarbeiten, spuckt er mir eine "Debug assertion Fehler"meldung aus, das ist für mich vielzu tief in irgendetwas C-internem gebohrt, davon hab ich keine ahnung mehr, kann vllt. doch jemand ein tipp geben, worans liegen könnte?
-
Azrael, il Meraz schrieb:
aber wenn ich versuche, irgendeine Nachricht zu verarbeiten, spuckt er mir eine "Debug assertion Fehler"meldung aus,
Was denn für eine Nachricht ? Wenn sich das Programm starten lässt, dann hat es doch schon etliche Nachrichten verarbeitet (WM_CREATE, ...) ohne Fehlermeldung ?
-
WM_CHAR wird verarbeitet. sogar wenn die nachricht garnichts macht, kommt ein fehler, sobald man eine Taste drückt. alt-f4 verträgt er genauso schlecht....
-
Azrael, il Meraz schrieb:
sobald man eine Taste drückt
Kontrolliere mal WM_KEYDOWN, WM_KEYUP.
-
dasselbe - assertion failure
-
Poste mal den Code einer Stelle wo der Fehler auftritt.
-
zuerst:
http://xcpp.de/ASE/dbgass.jpg
dann
http://xcpp.de/ASE/fehler.jpgdas ist irgendwas c/c++ internes - delete operator...
hab nicht explizit aufgerufen, deswegen k.ahier mal meine ganze projektmappe als rar:
wäre zuviel code zum posten, obwohl das net viel ist^^
-
Streich die Variable "TCHAR * aseAppName" aus der ASE.h und kommentiere in der ASE.cpp sämtliche Codezeilen aus, die auf "aseAppName" zugreifen.
Ein "delete aseAppName" sitzt an der falschen Stelle und verursacht den Fehler. Ausserdem wird sie nicht gebraucht.
-
was ist das denn? oO. xDDDDDDDDDDDDDDDDDDDDDD
vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen vielen Dank, du hast mir das leben gerettet - juhu, jetzt kanns endlich weitergehen. super.
aber was war denn das falsche jetzt? das im Destruktor? Wieso isn das falsch, dafür wird doch zuvor speicher reserviert oO.
-
Hab mir das jetzt nicht angeguckt ... aber
TCHAR* szString = new TCHAR[256]; // etwas damit machen delete [] szString;
ist eigentlich korrekt.
-
Azrael, il Meraz schrieb:
aber was war denn das falsche jetzt?
Im Grunde genommen nur eine einzige Codezeile :
bool ASE::CreateWClass(HINSTANCE hInst, TCHAR * AppName) { //... aseAppName = AppName; //... }
Überleg mal was "delete aseAppName" im Destruktor fatalerweise freigegeben hat. Da kommst Du bestimmt von selbst drauf.
-
oh, stringkonstante gelöscht xD. (bzw. versucht)
hätte es wohl wenn schon mit memcpy machen sollen. werds wohl auch tun - später sollen paar childwindows rein. danke nochmal ^^
-
'tschuldigt, dass ich diesen alten Thread wieder ausgrabe. Allerdings habe ich noch eine Frage zu diesem Abschnitt:
if (uMsg == WM_CREATE) SetWindowLong (hWnd, GWL_USERDATA, (LONG) ((LPCREATESTRUCT) lParam)->lpCreateParams); GAMESCENES *pThis = (GAMESCENES *) GetWindowLong (hWnd, GWL_USERDATA);
könnte man diesen Teil nicht vereinfachen? ich habe mir das so vorgestellt:
if (uMsg == WM_CREATE) CLASS *pThis = (CLASS *) ((LPCREATESTRUCT) lParam)->lpCreateParams)
-
Nein kann man nicht. Im Falle von WM_CREATE wird der Zeiger gespeichert und bei allen anderen Nachrichten aus dem GWL_USERDATA Speicher geholt.
-
Ahh ok, das erklärt dann natürlich das undefinierte Verhalten wenn ich das so mache