AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TInterfaceList und lokale Referenzen

Ein Thema von lizardking · begonnen am 19. Jun 2006 · letzter Beitrag vom 26. Jul 2006
 
lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#1

TInterfaceList und lokale Referenzen

  Alt 19. Jun 2006, 23:29
Hi zusammen,

hab gerade was, was mich extrem stutzig macht.
Kurze Erlaeuterung:

Ich lade Plugin-DLLs und speichere deren Interfaces(ITWPLugin) in eine TInterfaceList(FPLugins). In einer Funktion UnloadAllPlugins sollen die Eintraege in der Liste geloescht und die jeweilige DLL entladen werden (Handle zur DLL wird im Plugin gespeichert).
Folgender Code funktioniert (ist aber sehr unschoen):

Delphi-Quellcode:
function TTWPluginManager.RemovePlugins: TStringList;
var
  i: Integer;
  LHandle: THandle;
  LPlugin: ITWPlugin;
begin
 result := TStringList.Create;
 for i := FPlugins.Count - 1 downto 0 do
 begin
   LHandle := (FPlugins.Items[i] as ITWPlugin).Handle;
   result.Add(inttostr(LHandle));
   FPlugins.Delete(i);
  end;
end;

function TTWPluginManager.UnloadAllPlugins: Boolean;
var
  i: Integer;
  LHandle: THandle;
  HandleList: TStringList;
begin
  HandleList := RemovePlugins;
  for i := 0 to HandleList.Count - 1 do
  begin
   LHandle := StrToInt(HandleList[i]);
   FreeLibrary(LHandle);
  end;
  HandleList.Free;
end;
UnloadAllPlugins ruft quasi die Hilfsfunktion RemovePlugins auf, die in einer TStringList die Handles zurueckliefert, die entladen werden koennen und entlaedt diese entsprechend. Wenn ich jetzt aber versuche das in eine Funktion zu packen, so bekomme ich 'ne AV beim FreeLibrary. Ich kann mir das nur so erklaeren, dass im Scope von RemovePlugins zusaetzliche Referenzen zu den Plugin-Interfaces entstehen. Deshalb gibt's die AV, ich versuche halt eine Library zu entladen, von der noch Objekte vorhanden sind. Verlasse ich den Scope von RemovePlugins, so werden diese Referenzen natuerlich geloescht und die Objekte korrekterweise zerstoert.

Aber an welcher Stelle schaffe ich mir diese lokalen Referenzen ?

Bin fuer jeden Hinweis dankbar. Hab zwar diesen funktionierenden Workaround, aber gerade an 'ner Pluginschnittstelle will ich nicht direkt mit Pfusch anfangen ;-)

Gruesse,

Lizzy
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz