![]() |
AW: Überprüfen ob ein Objekt existiert aber wie?
|
AW: Überprüfen ob ein Objekt existiert aber wie?
Zitat:
Beim Starten der Anwendung werden alle 'Initialization'-Bereiche aller eingebundenen (explizit und implizit) Units aufgerufen: der richtige Ort, um Variablen zu initialisieren. Global ist 'böse' bzw. sollte vermieden werden, aber wer statische Klassen albern findet, kann hier in the old fashioned way seine statischen Felder initialisieren. Beim Beenden wird der 'Finalization'-Abschnitt aller Units aufgerufen. Hier kann man aufräumen. Ich initialisiere die Variable '_mediaplayer' mit nil. Beim ersten Aufruf der Funktion 'Mediaplayer' wird sie initialisiert. Aber nur dann, wenn der Finalization-Abschnitt noch nicht durchlaufen wurde. |
AW: Überprüfen ob ein Objekt existiert aber wie?
Danke euch beiden!
Werde mir das heute abend mal anschauen bzw. ausprobieren. |
AW: Überprüfen ob ein Objekt existiert aber wie?
Hier noch ein weiter Ansatz:
Delphi-Quellcode:
derMischka
function ObjectExists(aObj: TObject): boolean;
begin Result := False; if aObj = nil then exit; try Result := aObj.InheritsFrom(TObject); except end; end; |
AW: Überprüfen ob ein Objekt existiert aber wie?
Zitat:
|
AW: Überprüfen ob ein Objekt existiert aber wie?
Zitat:
Aber das kaschiert ja nur den eigentlichen Fehler. Und *das* ist sogar noch schlimmer als leere exception-Blöcke. |
AW: Überprüfen ob ein Objekt existiert aber wie?
Das ganze Konstrukt ist böse. An der Stelle im Speicher kann ja gerade rein „zufällig“ was stehen, was so aussieht wie ein Objekt. Und ausgerechnet in dem Fall, dass das Objekt gerade freigegeben wurde, ist es sehr wahrscheinlich, dass die Daten noch 1:1 dort stehen, obwohl das Objekt theoretisch nicht mehr existiert (es sei denn, Delphi nullt den Speicherbereich nach der Freigabe, tut es aber soweit ich weiß nicht).
|
AW: Überprüfen ob ein Objekt existiert aber wie?
Wie böser kann man eigentlich werden, also böser als *Böse*? Nicht das das hier abfärbt und irgendwie ein Eigenleben entwickelt.
Nichtsdestotrotz: Richtiger Einwand. |
AW: Überprüfen ob ein Objekt existiert aber wie?
zu meiner Verteidigung:
Da das Ergebnis mit False oben initialisiert ist, braucht man die "nur lesende" Funktion in der Exception-Klammer ncht weiter behandeln --> es wurde kein Code verändert (da nur gelesen) und bei einer Exception ist das richtige Ergebnis (False) ja schon im Register eax. der Mischka |
AW: Überprüfen ob ein Objekt existiert aber wie?
Besser? Oder auch noch böse? ;-)
Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin Result := aObj <> nil; if Result then try Result := aObj.InheritsFrom(TObject); except Result := false; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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