cast pointer nach long nach pointer
-
Hi,
ich habe eine Klasse:
class xyz {irgendetwas};
und folgende Variablen:
xyz *a;
long m;
xyz *b;das ergebnis solte wie "b = a;" werden, mit der Bedingung,
dass die Adresse von b in m gespeichert wird und anschliesend
aus dem Wert von m wieder eine Adresse gemacht wird und diese
b erhält.Ich hoffe, man kann mein Problem verstehen.
MfG
Schreck
-
m = (long)a; b = (xyz*)m;Bei den neuen casts bin ich meist daneben.
m = reinterpret_cast<long>(a); b = reinterpret_cast<xyz*>(m);Kurt
-
Hallo,
Kannst du das vielleicht näher erläutern?
Soweit ich das verstanden habe, hast du zwei Zeiger vom Typ foo*. Du möchtest nun den zweiten Zeiger dem ersten Zuweisen. Dabei soll aber der Wert des ersten Zeiger s in einer Variable vom Typ long gespeichert werden. Sehe ich das korrekt?Wenn ja:
class foo {... }; int main() { foo *obj1, *obj2 = new foo; obj1 = obj2; long address_of_obj2 = * reinterpret_cast<long*>(obj2); // nicht portabel und meistens sehr unsauber... ... delete obj2; };Gruß Caipi
-
mein Problem ist, das ich bei Windows mit der Funktion:
SetWindowLong (hWnd, GWL_USERDATA, 12345678);
eine beliebige long im Fenster als Userdata abspeichern kann.
mit GetWindowLong (hWnd, GWL_USERDATA) bekomme ich sie wieder.
jetzt abe ich foldendes gemacht:
gui_window_class gui_window_pointer2 = NULL;
SetWindowLong (hWnd, GWL_USERDATA, reinterpret_cast<long> (gui_window_pointer));
gui_window_pointer2 = reinterpret_cast<gui_window_class> (GetWindowLong (hWnd, GWL_USERDATA));nur leider ist gui_window_pointer2 immer NULL ???
-
Was erwartest du ?.
Du initialisierst gui_window_pointer2 mit NULL. Dann setzt du ein WindowLong mit dem Wert 0. Wenn du dir den Wert wieder zurückholst und nach Pointer castest bekommst du natürlich wieder NULL.
Kurt
-
nein, einmal ist es gui_window_pointer2 und einmal gui_window_pointer
-
Schreck schrieb:
nein, einmal ist es gui_window_pointer2 und einmal gui_window_pointer
Sorry hast ja recht.
Edit: Also am cast liegt's sicher nicht. Ist wahrscheinlich ein Windows-Problem.
-
ZuK schrieb:
Edit: Also am cast liegt's sicher nicht. Ist wahrscheinlich ein Windows-Problem.
hab schon an mir gezwifelt ....