GdiplusShutdown wirft Exception



  • Hallo,

    ich sage

    GdiplusStartupInput gdiplusStartupInput;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, 0);
    

    in meiner WinMain.

    Und in der WndProc sage ich:

    case WM_DESTROY:
    {
    	GdiplusShutdown(gdiplusToken);	
    
    	PostQuitMessage(0);
    	return 0L;
    }
    

    Doch sobald ich meine Anwendung schließe, bekomme ich eine
    "Unhandled exception at 0x76caf029 in Test.exe: 0xC0000005: Access violation writing location 0x00ad257c." in crt0dat.c. Da es beim Beenden passiert, kann ich es nicht wirklich debuggen 😞

    Weiß einer Rat?

    Gruß
    tsp



  • Hallo,

    wirklich alle GDI+-Objekte mit delete gelöscht vorher? Warum nicht GdiplusShutdown nach der Nachrichtenschleife, und GdiplusStartup gleich am Anfang von WinMain, wie hier:

    http://msdn.microsoft.com/en-us/library/ms533895(VS.85).aspx

    MfG,

    Probe-Nutzer



  • hmm, ich sage bei WM_PAINT BeginPaint und EndPaint, ich dachte da muss ich keine Gdi+ Objekte explizit löschen?
    Lieg ich da falsch?

    EDIT: EIne Nachrichtenschleife, so wie in dem Bsp. von der msdn, hab ich leider nicht.



  • tsp schrieb:

    ich dachte da muss ich keine Gdi+ Objekte explizit löschen?

    Sofern Du die Objekte mit new erzeugt hast, musst du die Objekte irgendwann auch wieder mit delete töten...



  • Hallo,

    EDIT: EIne Nachrichtenschleife, so wie in dem Bsp. von der msdn, hab ich leider nicht.

    Aber irgendwie musst du doch die Nachrichten abholen, um WM_DESTROY zu empfangen? Oder wie läuft das bei dir?

    Das erscheint mir alles sehr seltsam...

    MfG,

    Probe-Nutzer


  • Mod

    Probe-Nutzer schrieb:

    Aber irgendwie musst du doch die Nachrichten abholen, um WM_DESTROY zu empfangen? Oder wie läuft das bei dir?

    Das erscheint mir alles sehr seltsam...

    Seltsam sicherlich, aber nicht ungewöhnlich.
    Das Fenster wird erzeugt. Nachricht per SendMessage werden direkt zugestellt. Dazu braucht man keine Message-Loop.

    DestroyWindow sendet WM_DESTROY direkt mit SendMessage.



  • Hallo,

    ja, natürlich, daran habe ich jetzt überhaupt nicht gedacht. Für mich schon seltsam und auch ungewöhnlich, weil ich mich damit (mit einem WinAPI-Programm, das Fenster erstellt und keine Nachrichtenschleife hat) in meiner Berufs-Praxis bisher nicht beschäftigen musste.

    MfG,

    Probe-Nutzer


Anmelden zum Antworten