![]() |
Problem mit Destroy und IInterface
Huhu...
Habe ein kleines Problem mit einem Object das im Constructor ein Object erzeugt, welches das "Parent"-Object im Constructor als Interface übergibt. Das Problem ist, dass beim Destructor ein AV erzeugt wird (direkt nach dem "begin" vom Destroy) Erzeuge ich das Postfach-Object nicht gibs auch kein Probs. Bin für jeden Hinweis dankbar. Shalom
Delphi-Quellcode:
Die Klasse die das "Postfach"-Object beinhaltet...
destructor TPMPostFach.Destroy;
begin //hier Breakpoint gesetzt - nach "F7" -> AV - kommt also nicht zum "inherited" inherited; end;
Delphi-Quellcode:
Hier die "Postfach"-Klasse...
constructor TPmGateway.Create;
begin inherited; FPostfach := TPMPostFach.Create(Self);//Das Object mit dem übergebenen Interface (Self imlpementiert das Interface) end;
Delphi-Quellcode:
constructor TPMPostFach.Create(const aPmOnlineImportAction: PmIOnlineImportAction);
begin inherited Create(); PmOnlineImportAction := aPmOnlineImportAction; end; |
Re: Problem mit Destroy und IInterface
Arbeite entweder mit Parent-Child-Beziehung oder mit Interface. Ansonsten wird es passieren das sowohl der Parent als auch die automatische Referenzzählung versucht die Instanz freizugebn.
|
Re: Problem mit Destroy und IInterface
Zitat:
Die Exception kommt an folgender Stelle (RefCount ist "1"):
Delphi-Quellcode:
Zur Lösung des Problems habe ich jetzt eine procedure "Free_" mit folgendem Code eingeführt:
procedure TInterfacedObject.BeforeDestruction;
begin if RefCount <> 0 then Error(reInvalidPtr); end;
Delphi-Quellcode:
Wäre aber dennoch schön wenn mir einer erklären kann wie das Problem normalerweise zu lösen ist, so dass ".Free"/der normaler Destructor benutzt werden kann.
procedure TPmGateway.Free_;
begin Self._Release; end; Sahlom&TIA |
Re: Problem mit Destroy und IInterface
Hallo,
das Problem ist auf einfache Weise zu lösen: Entweder immer Objektreferenz oder immer Interfacereferenz. Gemischter Betrieb ist in Delphi ein Spiel mit dem Feuer. Das sollte man nur machen, wenn man ganz genau weiß, was man tut. Gruß xaromz |
Re: Problem mit Destroy und IInterface
Zitat:
Aber wie kann ich speziell bei meinem Fall das Problem lösen. Da ja das Postfach-Object welches das Interface benötigt in der Klasse ist die das Interface darstellt, kann ich ja nicht einfach das interface im Postfach-Object auf nil setzen. Im Destroy kommt ja schon die Exception!?... |
Re: Problem mit Destroy und IInterface
Hallo,
Zitat:
Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz