Zeig mal ein wenig Code.
Ein paar Tipps:
-überschreibe _AddRef und _Release (mit dem selben Code wie TInterfacedObject) und schau dir den Wert von FRefCount an. Sobald er 0 wird, wird dein Objekt (Interface) zertört.
-beim Zugriff auf dein Objekt/Interface immer mit Assigned prüfen ob das Objekt noch existiert.
Ich weiß nicht wie gut du dich mit Interfaces auskennst:
Delphi-Quellcode:
//Dieser Code ist richtig:
procedure TForm1.Button8Click(Sender: TObject);
var
MyInterface: IMyInterface;
MyObject: TMyInterfacedObject;
begin
MyObject:=TMyInterfacedObject.Create;
MyInterface:=MyObject;
MyObject.DoSomething;
MyInterface.DoSomething;
end;
//der Destruktor TMyInterfacedObject.Destroy wird automatisch aufgerufen!!!
//Dieser Code ist FALSCH!!!!!!
procedure TForm1.Button8Click(Sender: TObject);
var
MyInterface: IMyInterface;
MyObject: TMyInterfacedObject;
begin
MyObject:=TMyInterfacedObject.Create;
MyInterface:=MyObject;
MyObject.DoSomething;
MyInterface.DoSomething;
MyObject.Free;
end;
//Der Destruktor wird zwei mal aufgerufen -> Exception (Invalid pointer operation.)