Wird denn überhaupt sonst noch etwas aus dem
Package aufgerufen? Oder ist der Konstruktor dieser Klasse das erste, was aus dem
Package überhaupt Verwendung findet?
Hallo und danke für die Antwort,
seltsam, war ich gestern so viel zu müde, dass ich das nicht gemerkt habe? Eigentlich bin ich ja gestern schon durchgesteppt...
Der Constructor ist doch nicht schuld an meiner Misere. Das Programm läuft stattdessen so richtig fein durch,
bis es daran geht, das
Package wieder freizugeben.
Nach dem UnloadPackage knallt es.
Soll heißen, wenn ich das UnloadPackage auskommentiere, läuft mein Programm wunderbar durch, nur hinterlasse ich halt massenweise Speicherleichen...
[edit]
Ahh? Problem gelöst?
Nachdem ich meine UnloadPlugins Routine etwas verändert habe, scheint es zu funktionieren...
Delphi-Quellcode:
procedure TPluginLoader.UnloadPlugins;
var i : Integer;
begin
for i := 0 to FPluginList.Count - 1 do
begin
FPluginList.Items[i].plugin.Free; //<--- dazugefügt
UnloadPackage(FPluginList.Items[i].handle);
end;
end;
Ich merke mir das
Handle der Library, aus welcher ich ein plugin lade...
Ich hatte vorher nur die Library über das
Handle freigegeben (UnloadPackage); das Plugin, also die Delphi Klasse in der Library allerdings nicht.
Das hatte ich der ObjectList (FreeAndNil(FPluginList)) überlassen, die alle Plugins verwaltet.
Ich hatte gedacht, dass die Delphi-Klassen, sobald sie mal geladen sind, irgendwo im Speichermanager rumwuseln und "unabhängig" von der Library sind, dass ich also auch auf die Instanz der Klasse zugreifen kann, nachdem ich die Library freigegeben habe. War wohl ein Irrtum.
Jetzt gebe ich die Instanz meines Plugins frei und danach erst das
Package, jetzt funktioniert es.
Danke an alle, die sich ihren Kopf über meinem Problem zerbrochen haben, es stellt sich doch immer wieder heraus, dass mir das zu helfen scheint, wenn jemand anderes für mich denkt
.