Wenn man die Leute im Stich lässt (= wenn man beim Arbeiten ist), dann kommen die auch ohne Hilfe zum Ziel.
Zu deinem Problem mit der Schutzverletzung:
Zitat:
iPlg := aProc;
Hiermit liefert die
DLL eine neues Interface zurück. Wenn du nun die
DLL entlädst (FreeLibrary), so bleibt der Interface-Zeiger iPlg noch besteht, wohingegen der Speicherplatz des Interfaces von Windows freigegeben wird. Da Delphi beim Verlassen von
mCfgToolsClick bei allen dort verwendeten Interfaces den Referenzzähler um 1 herunter setzt (bei 0 wird das Interface freigegeben), greift das Programm auf ungültigen Speicher zu, was eine
AV zur Folge hat.
Um dieses Problem zu umgehen, musst du vor dem FreeLibary alle Interfaces freigeben. Dies kannst du auf folgende Weise machen:
Delphi-Quellcode:
showMessage(iPlg.GetName);
iPlg := nil; // Interface freigeben
FreeLibrary(hDLL);
Noch ein Tipp:
Wenn du mehrere Plugins gleichzeigtig im Speicher halten willst, so bietet sich die Klasse TInterfaceList aus der
Unit Contnrs an.