![]() |
AW: Warum zerstören sich meine Classen
Zitat:
Bernhard |
AW: Warum zerstören sich meine Classen
Boa, seid ihr alle gruselig... :pale::pale:
1) Wer versucht Free in ein Interface aufzunehmen hat die zugrundeliegende Problematik von Interfaces in Delphi nicht verstanden - sowas führt auf direktem Weg zu einer AV: 6 - setzen! Prüft mal eure Programme auf Zugriffe auf freigegebenen Speicher... 2) Objekte mit Interfaces zerstören sich nicht selber wenn der RefCount 0 wird. Es wird lediglich _Release() aufgerufen. Nur wenn man von einer Klasse ableitet, die in _Release() den Destructor aufruft (z.B. TInterfacedObject) zerstört sich das Object bei RefCount 0. 3) Objekte freigeben, auf die es noch irgendwelche Interface-Referenzen gibt ist *VERBOTEN*. Tut man es trotzdem, wird später wenn die Interface-Referenz gelöscht wird das _Release() des bereits freigegebenen Objektes aufgerufen. Zur Lösung des Problems: Vermutlich hilft hier eine Wrapper-Klasse, die sich um die Erstellung und das Aufräumen kümmert. Z.B. wäre es auch ganz nett die zugehörige Arbeit zum Erstellen und Aufräumen innerhalb der DLL in eigene Init und Exit Prozeduren (ohne Interfaces) auszulagern. |
AW: Warum zerstören sich meine Classen
Ich sagte doch: Interfaces richtig benutzen. Das hier ist ein Quick&Dirty, vor allem Dirty, Workaround, der es dem TE erleichtern soll, das ganze zu managen, weil scheinbar immernoch ein paar Probleme mit Interfaces und deren Benutzung existieren.
Bernhard |
AW: Warum zerstören sich meine Classen
Zitat:
Der TE ist kein professioneller Programmierer und schon gar nicht Informatiker. Berücksichtige das Bitte! Ich stelle nur Fragen wenn Sie beantwortet werden freut es mich natürlich. Soll aber nicht heißen das jemand für mein Hobby (Arbeiten soll). Es ist der Sinn eines Forums das man sich dort informiert um zu lernen. Und was an meiner letzten Frage jetzt so unverständlich war bzw.. was es damit zu tun hat es mir leichter zu machen verstehe ich jetzt nun wirklich nicht. Ich habe gefragt ob sich das ändern der Interface auf den Speicher auswirkt. Was war da nun so tragisch :?: gruss |
AW: Warum zerstören sich meine Classen
das soll jetzt aber nicht zum persönlichen Angriff mutieren. Außerdem hatte ich gedacht, dass die bis jetzt erarbeitete Lösung so halbwegs funktioniert und deinen Ansprüchen fürs erste genügt. Ich habe mich noch nie damit beschäftigt, wie man Interfaces einsetzt um ganze Objekte zwischen DLL und EXE auszutauschen, ich kann also nur Tipps geben, wie und ob das funktioniert, kann ich nicht 100%ig sagen.
Bernhard PS: Es klingt nur für mich komisch, dass die zuerst angesprochene Version nicht funktioniert, wobei die gerade das Non-Plus-Ultra ist. |
AW: Warum zerstören sich meine Classen
Zitat:
Das war kein Angriff auf deine Person. Danke nochmal für deine Hilfe. PS: Möchte halt nur verstehen wie das alles zusammenhängt. Wo soll ich denn fragen wenn nicht hier ;) gruss |
AW: Warum zerstören sich meine Classen
Free in das Interface aufzunehmen oder das Objekt über eine andere Methode des Interface freizugeben ist problematisch. Es existiert zu diesem Zeitpunkt zumindest diese eine Interfacevariable. Danach wird irgendwann der Gültigkeitsbereich für diese Variable verlassen, das übergeordnete Objekt freigegeben, bzw. der Interface-Variable NIL oder ein anderer Wert zugewiesen.
Dabei wird automatisch über das Interface "_Release" des implementierenden Objects aufgerufen.
Delphi-Quellcode:
Da der versteckt übergebene Parameter Self auf ein nicht mehr existierendes Objekt verweist, kann der implizite Zugriff auf Self.FOwnerInterface zur Zugriffsverletzung führen.
function TInterfacedPersistent._Release: Integer;
begin if FOwnerInterface <> nil then Result := FOwnerInterface._Release else Result := -1; end; |
AW: Warum zerstören sich meine Classen
Zitat:
Denke das Windows das Automatisch übernimmt wenn das Programm geschlossen wird. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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