Einzelnen Beitrag anzeigen

xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Interfaces werden nicht dereferenziert

  Alt 1. Jul 2005, 12:38
Hallo,
Zitat von barf00s:
Delphi-Quellcode:
var
  xInterface: IWhatever;

begin
  if Assigned(xInterface) then
    xInterface := nil;
end;
Delphi-Quellcode:
var
  xObj: TWhatever;

begin
  xObj := TWhatever.Create As IWhatever;
  try
  finally
    FreeAndNil(xObj);
  end;
end;
Das sind beides leider keine Lösungen für mein Problem. Ich weiss, dass ich die Interfaces freigeben muss, nur nicht wo. Ich hab ein MDI-Fenster, das die Objekte erstellt und den PlugIns sowie diversen Paletten zur Verfügung stellt. Die Objekte werden in OnCreate erzeugt und in OnDestroy auf nil gesetzt. Irgendwo dazwischen werden an allen möglichen Stellen die Objekte verwendet bzw. manipuliert, das sind einige Hundert Stellen im Quellcode. So wie es aussieht muss ich dies Stellen alle untersuchen und die Interfaces da freigeben, wo ichs vergessen hab.
Als das noch einfache Delphi-Objekte waren war das ja egal, bzw. Delphi hat sogar gemeckert (Hinweis:...wird nie benutzt) wenn man das Objekt auf nil gesetzt hat. Warum bringt Delphi keine Warnung, wenn man ein Interface benutzt und nicht wieder freigibt?

Noch was: Wenn ich mir ein Interface so hole
Delphi-Quellcode:
if (XXX as IMyInterface).IrgendeinProperty = True then
  ...
wird dann das Interface von Delphi automatisch wieder freigegeben?

Gruß
xaromz
  Mit Zitat antworten Zitat