Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.482 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9
  Alt 1. Apr 2003, 20:40
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.
  Mit Zitat antworten Zitat