static Routine : Zeigerverkürzung mit SetWindowLong
-
ich habe das problem,
dass eine HandlerRoutine in eine Klasse gepackt werden muss - und zwar als static.
d.h. ich muss aber in dieser routine auf nicht statische members zugreifen,
und hätte dies über SetWindowLong gemacht,
aber z.b. bei GetWindowLong kommt nicht der richtige Pointer raus.damit es auch ohne klasse funkz hier eine variante zum testen:
#define _WIN32_WINNT 0x0500
#include "windows.h"
...
HWND hwnd = GetConsoleWindow();
char this[] = "test";
char *this;SetWindowLongPtr(hwnd,GWLP_USERDATA,(LONG)_this);
this_ = (char*)GetWindowLong(hwnd,GWLP_USERDATA);das FAQ - hat mir auch nicht weitergeholfen:
(http://c-plusplus.net/forum/viewtopic.php?t=39356)THX
-
Auf ein Consolen-Fenster kannst du SetWindowLong leider nicht benutzen. Hab ich auch schon probiert. GetLastError() gibt immer den Fehler "Ungültiger Index".
-
und was wäre wenn ich ein unsichtbares fenster verwenden würde?
-
Du musst in der WNDCLASS-Struktur des Fenster vor dem Erstellen festlegen, wieviel Bytes extra du brauchst. Das geht mit der Variablen cbWndExtra.
Deswegen klappt es auch nicht mit einem Konsolenfenster.
-
aber für GWLP_USERDATA ist doch schon automatisch speicherplatz reservert.
-
Hmmm... Kann sein.
Der Petzold sagt etwas anderes auf den Seiten 287-290. Aber da benutzt der auch kein GWLP_USERDATA, sondern 0.Scheint so, als hättest du Recht.
Es ist eindeutig schon zu spät.