dll aus dem Speicher entfernen



  • Ich habe eine dll, die iorgendwo noch ein hässliches Speicherleck hat. Zwar tut sie während des Programmablaufs alles, was sie tun soll - aber irgendetwas hapert mit dem CleanUp.

    Wie kann ich, zumindest bis ich den Fehler eingegrenzt habe, es erzwingen, dass die dll nach Programmende freigegeben wird?



  • Was meinst du mit freigeben? Wenn dein Prozess beendet wird, ist logischerweise auch die DLL nicht mehr eingeblendet. Wenn ein anderer Prozess sie noch eingeblendet hat, musst du eben dafür sorgen, daß der sie auch entlädt. Wann und ob das Betriebssystem die DLL aus dem physischen Speicher entfernt, kann dir doch egal sein.



  • Ja, genau hier liegt das Problem. Der Prozess wird nicht ordnungsgemäß beendet, sondern hängt sich mit dem CleanUp auf. Das ist eine DirectX Problematik, die immer dann auftaucht, wenn eine Ressource - ein Font, ein Buffer, was immer - nicht mit einem SAFE_RELEASE "freigegeben" wird.

    Der Effekt ist, dass mit dem Programmende eine Unhandled Exception angezeigt wird.



  • SetUnhandledExceptionFilter und dann einfach das Programm mit TerminateProcess beenden.
    Ist aber wirklich sehr unschön und sollte eigentlich nie verwendet werden!


  • Mod

    Man kann es ja erstmal auch einfach nur mit ExitProcress pur versuchen...
    Ist zwar auch nicht sauber, aber immerhin besser als TerminateProcess, wenn es geht.


Anmelden zum Antworten