Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Überprüfen ob ein Objekt existiert aber wie? (https://www.delphipraxis.net/37259-ueberpruefen-ob-ein-objekt-existiert-aber-wie.html)

Sir Rufo 11. Jun 2013 23:13

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Doku http://docwiki.embarcadero.com/RADSt...amme_und_Units ;)

Furtbichler 12. Jun 2013 07:33

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Zitat:

Zitat von WIng2005 (Beitrag 1218312)
@Furtbichler

Kannst du mal bitte kurz erläutern, welchen Zweck dieser Bereich erfüllt, bzw. wann dieser aufgerufen wird?:

Delphi-Quellcode:
initialization
  _finalized := false;
  _mediaplayer := nil;
finalization
  _finalized := true;
  FreeAndNil(_mediaplayer);
end
Danke euch allen!!!

Klar:
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.

WIng2005 14. Jun 2013 09:05

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Danke euch beiden!
Werde mir das heute abend mal anschauen bzw. ausprobieren.

derMischka 14. Jun 2013 13:06

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Hier noch ein weiter Ansatz:

Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin
  Result := False;
  if aObj = nil then exit;
  try
    Result := aObj.InheritsFrom(TObject);
  except
  end;
end;
derMischka

Darlo 14. Jun 2013 19:21

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Zitat:

Zitat von derMischka (Beitrag 1218610)
Hier noch ein weiter Ansatz:

Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin
  Result := False;
  if aObj = nil then exit;
  try
    Result := aObj.InheritsFrom(TObject);
  except
  end;
end;
derMischka

Leere Exception-Blöcke sind doch noch böser als globale Vars. :duck:

Furtbichler 14. Jun 2013 20:00

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Zitat:

Zitat von Darlo (Beitrag 1218635)
Zitat:

Zitat von derMischka (Beitrag 1218610)
Hier noch ein weiter Ansatz:

Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin
  Result := False;
  if aObj = nil then exit;
  try
    Result := aObj.InheritsFrom(TObject);
  except
  end;
end;
derMischka

Leere Exception-Blöcke sind doch noch böser als globale Vars. :duck:

Absolut korrekt, obwohl hier 'eigentlich' eine scheinbar gute Absicht dahinter steckt, nämlich auch nicht genullte, aber ungültige Zeiger als solche zu erkennen.

Aber das kaschiert ja nur den eigentlichen Fehler. Und *das* ist sogar noch schlimmer als leere exception-Blöcke.

Namenloser 14. Jun 2013 23:32

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).

Furtbichler 14. Jun 2013 23:45

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.

derMischka 15. Jun 2013 16:37

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

nahpets 15. Jun 2013 17:14

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 05:08 Uhr.
Seite 4 von 5   « Erste     234 5      

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