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 ....


Anmelden zum Antworten