virtual member -> vtable problem



  • if(msg == WM_CREATE) {
        SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)lParam);
    }
    Window *wnd = (Window*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
    

    Sicher, dass das so richtig abläuft?



  • David_pb schrieb:

    if(msg == WM_CREATE) {
        SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)lParam);
    }
    Window *wnd = (Window*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
    

    Sicher, dass das so richtig abläuft?

    Ja, wenn virtual entfernt ist funktioniert das einwandfrei.



  • VirtualDreams schrieb:

    Ja, wenn virtual entfernt ist funktioniert das einwandfrei.

    Was nicht heißt das dein Code korrekt ist...



  • Reduzier dein Problem auf das Wesentliche. Überprüfe, ob der Fehler immer noch auftritt, wenn du die Windows-Anweisungen weglässt, bis du nur noch leere Klassen hast. So kannst du relativ schnell feststellen, welcher Codeteil für den Fehler verantwortlich ist.



  • Witziger Fehler, hab es gefunden

    Statt

    SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)lParam);
    

    muss es so gemacht werden

    Window *w = (Window*)((LPCREATESTRUCT)lParam)->lpCreateParams;
    SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)w);
    

    da lParam nur ein weiterer Pointer auf die Struct ist. Hab es nur dadurch gefunden weil lParam den pointer auf die vtable enthalten hatte...

    Trotzdem vielen Danke für eure Mühe! 🙂



  • VirtualDreams schrieb:

    Witziger Fehler, hab es gefunden

    Statt

    SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)lParam);
    

    muss es so gemacht werden

    Window *w = (Window*)((LPCREATESTRUCT)lParam)->lpCreateParams;
    SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)w);
    

    da lParam nur ein weiterer Pointer auf die Struct ist. Hab es nur dadurch gefunden weil lParam den pointer auf die vtable enthalten hatte...

    Neiiiin, ehrlich? 🙄


  • Mod

    Was hat das alles mit Standard-C++ zu tun?



  • Jetzt nichts mehr, ich dachte erst, es würde was mit virtuellen Membern zu tun haben.

    [quote="David_pb"]

    VirtualDreams schrieb:

    Witziger Fehler, hab es gefunden

    ...

    Neiiiin, ehrlich? 🙄

    Bitte weniger Sarkastisch, ich hatte es einfach vergessen, das da noch ne struct dahinter hängt. Keiner ist perfekt...



  • [quote="VirtualDreams"]Jetzt nichts mehr, ich dachte erst, es würde was mit virtuellen Membern zu tun haben.

    David_pb schrieb:

    VirtualDreams schrieb:

    Witziger Fehler, hab es gefunden

    ...

    Neiiiin, ehrlich? 🙄

    Bitte weniger Sarkastisch, ich hatte es einfach vergessen, das da noch ne struct dahinter hängt. Keiner ist perfekt...

    Ich hab dir doch sogar nen Tipp gegeben...



  • OK, dann hab ich falsch interpretiert. Bin ja noch den Dingen nachgegangen, aber muss einfach nur übersehen haben ^^


Anmelden zum Antworten