AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Warum zerstören sich meine Classen

Warum zerstören sich meine Classen

Ein Thema von EWeiss · begonnen am 21. Mär 2011 · letzter Beitrag vom 23. Mär 2011
Antwort Antwort
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#1

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 14:04
So grob stimmt das. Du definierst ein Free in deinem Interface und schon ist es zugänglich. Free ist bei deinem Objekt schon definiert und zieht mit deinem TInterfacedPersistent ein (passiert auch bei TInterfacedObject). Free sorgt dafür, dass das Objekt verschwindet. Heißt also: Von außen Free aufrufen und weg ist das Objekt.

Bernhard

ADD: Eben so, als würdest du das Objekt vor dir haben.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 14:14
So grob stimmt das. Du definierst ein Free in deinem Interface und schon ist es zugänglich. Free ist bei deinem Objekt schon definiert und zieht mit deinem TInterfacedPersistent ein (passiert auch bei TInterfacedObject). Free sorgt dafür, dass das Objekt verschwindet. Heißt also: Von außen Free aufrufen und weg ist das Objekt.

Bernhard

ADD: Eben so, als würdest du das Objekt vor dir haben.
Danke für deine Erklärung..
Überlege nun ob ich alle Interface nach TInterfacedPersistent umlege.
Das verhindert zumindest das sie selbst zerstört werden.

In wie weit sich das jetzt auf Speicher usw.. bemerkbar macht weiss ich allerdings nicht.
Denke da könnte einiges zusammen kommen wenn diese während der laufzeit nicht freigegeben werden.

Da ist eure Meinung gefragt.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 14:31
Da ist eure Meinung gefragt.
Meine Meinung? - Einfach die Interfaces richtig verwenden und schon klappt das.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Patito

Registriert seit: 8. Sep 2006
108 Beiträge
 
#4

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 14:44
Boa, seid ihr alle gruselig...

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.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#5

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 14:52
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 15:01
Zitat:
weil scheinbar immernoch ein paar Probleme mit Interfaces und deren Benutzung existieren.
Dann erkläre es mir doch wenn es nicht zuviel von deiner Zeit in Anspruch nimmt.
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
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 15:08
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.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Warum zerstören sich meine Classen

  Alt 22. Mär 2011, 15:10
Zitat:
das soll jetzt aber nicht zum persönlichen Angriff mutieren.
Nicht falsch verstehen... Auf keinen Fall
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
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:08 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