AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit Destroy und IInterface

Offene Frage von "Meta777"
Ein Thema von Meta777 · begonnen am 1. Apr 2008 · letzter Beitrag vom 1. Apr 2008
Antwort Antwort
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Problem mit Destroy und IInterface

  Alt 1. Apr 2008, 08:54
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:
destructor TPMPostFach.Destroy;
begin //hier Breakpoint gesetzt - nach "F7" -> AV - kommt also nicht zum "inherited"
  inherited;
end;
Die Klasse die das "Postfach"-Object beinhaltet...

Delphi-Quellcode:
constructor TPmGateway.Create;
begin
  inherited;
  FPostfach := TPMPostFach.Create(Self);//Das Object mit dem übergebenen Interface (Self imlpementiert das Interface)
end;
Hier die "Postfach"-Klasse...

Delphi-Quellcode:
constructor TPMPostFach.Create(const aPmOnlineImportAction: PmIOnlineImportAction);
begin
  inherited Create();
  PmOnlineImportAction := aPmOnlineImportAction;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Problem mit Destroy und IInterface

  Alt 1. Apr 2008, 08:58
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: Problem mit Destroy und IInterface

  Alt 1. Apr 2008, 10:24
Zitat von Bernhard Geyer:
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.
Ich vergass zu werwähnen das die Klassen direkt von TObject abgeleitet werden. Also gibt es auch kein Parent-Child-Beziehung.

Die Exception kommt an folgender Stelle (RefCount ist "1"):
Delphi-Quellcode:
procedure TInterfacedObject.BeforeDestruction;
begin
  if RefCount <> 0 then
    Error(reInvalidPtr);
end;
Zur Lösung des Problems habe ich jetzt eine procedure "Free_" mit folgendem Code eingeführt:
Delphi-Quellcode:
procedure TPmGateway.Free_;
begin
  Self._Release;
end;
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.

Sahlom&TIA
  Mit Zitat antworten Zitat
xaromz

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

Re: Problem mit Destroy und IInterface

  Alt 1. Apr 2008, 10:37
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: Problem mit Destroy und IInterface

  Alt 1. Apr 2008, 11:31
Zitat von xaromz:
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
Hab ich schonmal gelesen - ich glaub in deinem Tut!? ^^
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!?...
  Mit Zitat antworten Zitat
xaromz

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

Re: Problem mit Destroy und IInterface

  Alt 1. Apr 2008, 11:53
Hallo,
Zitat von Meta777:
Aber wie kann ich speziell bei meinem Fall das Problem lösen.
Zeig mal etwas mehr Code. Insbesondere die Deklaration der beiden Klassen und des Interfaces wäre interessant.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:06 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