![]() |
DLL nach Benutzung wieder freigeben
Hallo,
ich habe ein kleines Problem. Ich habe ein Programm, welches Plug-Ins über DLLs einbindet. Jetzt möchte ich aber nicht alle DLLs beim Programmstart laden, sondern erst dann, wenn die einzelnen Module gebraucht werden. Das ist eigentlich auch kein Problem. Das Problem ist eher das Freigeben. Die PlugIn-DLLs enthalten allesamt Formulare, die der Anwender bedient. Schließt er nun ein Formular, wird es ja noch weiter ausgeführt. Wie kann ich jetzt feststellen, dass das PlugIn nicht mehr verwendet wird, sodass ich es dann freigeben kann.. Danke im Voraus |
Re: DLL nach Benutzung wieder freigeben
Da mußt du schon über die eigene Programmlogik dies Sicherstellen. Eine Funktion der Art UnloadDynamicLoadedDLLIfNoLongerNeeded gibt es nicht.
|
Re: DLL nach Benutzung wieder freigeben
Macht das nicht Windows sowieso automatisch, bzw. 'on demand'?
|
Re: DLL nach Benutzung wieder freigeben
Zitat:
|
Re: DLL nach Benutzung wieder freigeben
Danke...
Hm... wie kann ich eine solche Funktion realisieren? Habe keine Idee. |
Re: DLL nach Benutzung wieder freigeben
Indem du allen Zugriff auf eine solche DLL über ein Klasse (Könnte das
![]() |
Re: DLL nach Benutzung wieder freigeben
Danke, das werde ich mir nochmal genauer ansehen!
Schönes WE! |
Re: DLL nach Benutzung wieder freigeben
Ja... hier bin ich wieder...
Hab mir mal den Wiki-Eintrag angesehen und hier im Forum nach Fassade geschaut. Aber ich habe leider noch keine Vorstellung, wie das konkret funktioniert... Gibt es irgendwo ein Tutorial, das mir beim Verständnis helfen könnte? |
Re: DLL nach Benutzung wieder freigeben
Zitat:
Kannst du über Interface realisieren. Diese kannst du dann bei bedarf registrieren und unregistrieren gruss Emil |
Re: DLL nach Benutzung wieder freigeben
Hallo,
hab mich nochmal damit beschäftigt und bin auf die Idee gekommen, dass das evtl auch über selbsterstellte Messages gehen kann. Ist das richtig, oder funktioniert das doch nicht. Habe noch nie eine Message selbst versendet bzw. erstellt. Danke! |
Re: DLL nach Benutzung wieder freigeben
Wollte nochmal lieb nachfragen, ob das mit den Messages funktionieren kann? Ich dachte mir das so:
Wenn das PlugIn geschlossen wird (onCloseQuery etc) sendet es eine Nachricht an das Hauptprogramm. Dieses wertet die Message aus und gibt die DLL wieder frei (also das Plug-In) Danke |
Re: DLL nach Benutzung wieder freigeben
Zitat:
|
Re: DLL nach Benutzung wieder freigeben
Ja super! Ähm... kennt jmd. ein kleines Tut zum erstellen eigener Messages?
Danke! |
Re: DLL nach Benutzung wieder freigeben
Hallo,
z.B. RegisterWindowsMessage('MeinPlugIn_eins'); Das ruft sowohl deine Hauptprogramm also auch dein Plugin auf, der Return-Wert ist der gleiche. Dann über PostMessage(hMainWnd..) die Nachricht ans Hauptfenster (das hMainWnd muss das Hauptfenster aber an das Plugin übergeben). Heiko PS: Der Name sollte aber schon eindeutiger sein ;) |
Re: DLL nach Benutzung wieder freigeben
Danke, aber diese Methode verstehe ich nicht. Was bewirkt sie? Gibt es einen Unterschied zu dieser?
![]() Danke |
Re: DLL nach Benutzung wieder freigeben
Hallo,
ja, das ist das gleiche (weiter unten, nicht WM_USER + X) Windows erzeugt eine eindeutige Message-Nummer, egal wer RegisterWindowsMessage aufruft (könnten sogar 2 verschiedene Programme sein) Heiko |
Re: DLL nach Benutzung wieder freigeben
Also, ich habe es jetzt so gemacht:
Ich habe im Hauptprogramm und in dem PlugIn eine Message WM_UNLOADPLUGIN definiert. Beim Programmstart speichere ich das Handle von der MainForm und übergebe diese beim Öffnen an alle PlugIns. Da meine Plug-In-DLLs auch Forms enthalten, kann ich ja auf Schließen des PlugIns reagieren. In einem solchen Event sende ich einfach eine Message an das MainFormHandle mit WM_UNLOADPLUGIN und siehe da... es ist weg und der Speicher ist auch korrekt freigegeben! Zu der anderen Lösung von hoika: Dies scheint dann also das gleiche wie "meine" Lösung zu sein! Danke für eure Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz