Einzelnen Beitrag anzeigen

Henning der zweite

Registriert seit: 10. Mär 2008
Ort: Braunschweig
21 Beiträge
 
Delphi 5 Standard
 
#5

Re: Plugin-System Version 3

  Alt 20. Jul 2009, 10:07
Zitat:
mußt/darfst du auch nicht, denn diese Methode ruft jede "Programmiersprache" auf, wenn da eine Variable ala Interface-Referenz entfernt/freigeeben wird.
Dann lese dir mal den Thread bei Delphi-Treff durch, da habe ich das auch durchdiskutiert.

In diesen Thread - so denke ich jedenfalls - gehört diese Diskussion nicht.

Zitat:
du darfst dann nur dein Objekt nicht von TInterfacedObject oder einem seiner Nachfolger ableiten,
sondern mußt die Methoden für IInterface/IUnknown selber implementieren, bzw. diese Basisklasse verwenden:
Schon klar, so habe ich es auch gemacht (siehe Quelltext des Plugin-Systems).

Bzw. damit sich die Diskussion hat, das Problem nochmal auf den Knackpunkt gebracht:

(abgekürzter Delphi-Code)
In der DLL:
Delphi-Quellcode:
func ExportIntf: IIntf; //exportiert
  Result := TITestImpl.Create;
In der Anwendung:
Delphi-Quellcode:
DLL.LoadLib;
Intf := DLL.ExportIntf as ITest;
Intf := nil;
DLL.FreeLib;
In dem Beispiel knallt es am Ende (ganz am Ende der Prozedur). Warum? Weil bei dem as-Cast eine temporäre Interface-Referenz entsteht, von der erst am Ende _Release aufgerufen wird - zu diesem Zeitpunkt wurde die DLL mitsamt des Objekts aber schon längst aus dem Speicher entfernt -> es knallt.
Henning D.
  Mit Zitat antworten Zitat