DLLs entladen



  • Moin!
    Ich hab schon ein bisschen mit DLLs herumexperimentiert und finde die Möglichkeit mit den LIBs und #pragma comment(lib... auch ganz gut für mein Projekt geeignet.

    Es funktioniert auch ganz gut, automatisches Laden und Entladen 😋
    Jetzt habe ich aber ein Problem, dass ich in DLLMain meiner DLL, Funktionen aufrufe, die in anderen DLLs stecken. Problem, diese DLLs, deren Funktionen ich nutzen will, sind bereits entladen, wenn meine DLL entladen werden soll.

    Kurz: ich suche nach einer Möglichkeit, die Reihenfolge, in der die DLLs geladen und entladen werden, festzulegen. Damit meine DLL immer als letzte geladen, und als erste entladen wird.

    Kennt sich da jemand aus?
    Ich danke schonmal im voraus! 🙂



  • Hast Du mal die Doku zu DllMain gelesen????

    Du darf darin eigentlich *nichts* machen; oder zumindest nichts anderes als Funktionen in kernel32 aufrufen!



  • Es geht mir dabei eigentlich um eine Notfall-Lösung, falls mir das Programm abschmiert.
    Dafür habe ich in der DLL extra eine Funktion angelegt, nenn sie NotfallAufraeumen oder sonstwie
    Da wird, wie der Name schon sagt, für den Notfall alles fein aufgeräumt, was noch zu retten ist.

    in DLLMain wird beim entladen geprüft ob schon alles aufgeräumt ist, wenn nicht wird die Notfall-Funktion aufgerufen.

    Oder kennt jemand eine bessere Lösung für eine Funktion, die aufgerufen wird, sobald es einen Crash gibt und/oder das Programm beendet wird?


  • Mod

    Einen Exception Handler
    SetUnhandledExceptionFilter
    http://msdn.microsoft.com/en-us/library/ms680634(VS.85).aspx

    Und beachte Jochens Blog:
    http://blog.kalmbachnet.de/?postid=75



  • Danke dass du dir die Mühe gemacht hast!
    Genau das habe ich gesucht!

    Das Sahnehäubchen wäre jetzt noch, wenn es auch mit Debugger funktionieren würde! 😉



  • das betriebssystem gibt doch automatisch alle resourcen frei wenn der prozess beendet wird. ist wahrscheinlich sinnlos was du vorhast.



  • 234 schrieb:

    das betriebssystem gibt doch automatisch alle resourcen frei wenn der prozess beendet wird. ist wahrscheinlich sinnlos was du vorhast.

    Nein, würde ich nicht sagen. Denk mal en die Resourcen über die das Betriebssystem keine Kontrolle hat.

    Was ist mit Speicher, der per new angefordert ist?
    Nicht freigegebene Resourcen im Grafikkarten-Speicher?
    Nicht freigegebene COM-Schnittstellen?
    -> Dafür habe ich meinen Speichermanager, dessen Exitfunktion im UnhandledExceptionFilter aufgerufen wird. 💡



  • Was ist mit Speicher, der per new angefordert ist?

    Der wird definitiv freigegeben wenn der Process terminiert.
    Simon



  • simon.gysi schrieb:

    Was ist mit Speicher, der per new angefordert ist?

    Der wird definitiv freigegeben wenn der Process terminiert.
    Simon

    Dann heißt das wohl NIE WIEDER AUF DELETE ACHTEN ??? 😃


  • Mod

    Blaze schrieb:

    Danke dass du dir die Mühe gemacht hast!
    Genau das habe ich gesucht!

    Das Sahnehäubchen wäre jetzt noch, wenn es auch mit Debugger funktionieren würde! 😉

    Funktioniert auch im Debugger. Du musst dem Debugger nur sagen welche Exceptions er nicht behandeln soll!
    Siehe Debug Menü!



  • Hast recht! geht! Jippi! 😃



  • Blaze schrieb:

    simon.gysi schrieb:

    Was ist mit Speicher, der per new angefordert ist?

    Der wird definitiv freigegeben wenn der Process terminiert.
    Simon

    Dann heißt das wohl NIE WIEDER AUF DELETE ACHTEN ??? 😃

    falsch. alle resourcen müssen wieder freigegeben werden


  • Mod

    simon.gysi schrieb:

    Blaze schrieb:

    simon.gysi schrieb:

    Was ist mit Speicher, der per new angefordert ist?

    Der wird definitiv freigegeben wenn der Process terminiert.
    Simon

    Dann heißt das wohl NIE WIEDER AUF DELETE ACHTEN ??? 😃

    falsch. alle resourcen müssen wieder freigegeben werden

    Eben. Besonders Mutexe und andere Objekte müssen freigegeben werden. Auch Locks von Handles die man geerbt hat sollte man nicht einfach vernachlässigen.



  • und local-server com objekte sind auch nicht ganz unwesentlich mit einer pflicht zum aufräumen belegt.


Anmelden zum Antworten