AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wann wird initialization von eingebundenen units aufgerufen?

Wann wird initialization von eingebundenen units aufgerufen?

Ein Thema von xineohp · begonnen am 2. Sep 2008 · letzter Beitrag vom 3. Sep 2008
Antwort Antwort
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#1

Wann wird initialization von eingebundenen units aufgerufen?

  Alt 2. Sep 2008, 14:37
hi,

wann wird der initialization/finalization-Block von eingebundenen Units aufgerufen? Mir ist aufgefallen, dass die "Hauptdatei" (die Datei, die mit program bzw. library beginnt) keinen initialization/finalization-Block besitzt, dafür aber ein begin/end. Wenn ich jetzt also in die Hauptdatei eine Unit einbinde die einen initialization/finalization-Block hat, was wird zuerst aufgerufen? der initialization/finalization-Block der eingebundenen Unit oder der begin/end-Block der Hauptdatei? Insbesondere interessiert mich ob das bei DLLs irgendwie besonders/anders ist.
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.983 Beiträge
 
Delphi 7 Professional
 
#2

Re: Wann wird initialization von eingebundenen units aufgeru

  Alt 2. Sep 2008, 14:43
In der Reihenfolge, in der die Units eingebunden werden und vor dem begin..end der .dpr
Ralph
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#3

Re: Wann wird initialization von eingebundenen units aufgeru

  Alt 2. Sep 2008, 20:00
Du kannst dich nicht auf irgendeine Reihenfolge verlassen. Diese Reihenfolge kann beim nächsten Release beliebig geändert werden.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
jottkaerr

Registriert seit: 2. Jul 2007
Ort: Tuttlingen
80 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Wann wird initialization von eingebundenen units aufgeru

  Alt 3. Sep 2008, 07:11
Die Reihenfolge der Abarbeitung der initialization-Abschnitte wird mit Sicherheit nicht mehr geändert werden. Sie ist nämlich dokumentiert, und es gibt viel zu viele Quelltexte, die sich darauf verlassen. Den auf eine solche Änderung folgenden Aufschrei, auch der eigenen Entwickler, will Embarcadero bzw. Codegear nicht hören.

jkr
Jürgen Krämer
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.864 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Wann wird initialization von eingebundenen units aufgeru

  Alt 3. Sep 2008, 08:13
Zitat von jottkaerr:
Die Reihenfolge der Abarbeitung der initialization-Abschnitte wird mit Sicherheit nicht mehr geändert werden. Sie ist nämlich dokumentiert,
Quelle?

Zitat von jottkaerr:
und es gibt viel zu viele Quelltexte, die sich darauf verlassen. Den auf eine solche Änderung folgenden Aufschrei, auch der eigenen Entwickler, will Embarcadero bzw. Codegear nicht hören.
Ich wüsste nicht wo in unserem Programm die Init-Reihenfolge der Units relevant wäre? Und da du ja nur auf globale Variablen von Units zugreifen kannst die du auch used ist auf jeden Fall in dieser Unit die initalisierung schon durchgeführt bevor irgendeine Quellcodezeile deiner Unit aufgerufen wird. Es gilt die Regel die taaktaak beschrieben hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
jottkaerr

Registriert seit: 2. Jul 2007
Ort: Tuttlingen
80 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Wann wird initialization von eingebundenen units aufgeru

  Alt 3. Sep 2008, 08:43
Zitat von Bernhard Geyer:
Zitat von jottkaerr:
Die Reihenfolge der Abarbeitung der initialization-Abschnitte wird mit Sicherheit nicht mehr geändert werden. Sie ist nämlich dokumentiert,
Quelle?

In der Delphi-5-Hilfe, besonders der zweite Absatz:

Zitat von Delphi-Hilfe:
Der initialization-Abschnitt

Der initialization-Abschnitt ist optional. Er beginnt mit dem reservierten Wort initialization und endet mit dem Beginn des finalization-Abschnitts oder - wenn kein finalization-Abschnitt vorhanden ist - mit dem Ende der Unit. Der initialization-Abschnitt enthält Anweisungen, die beim Programmstart in der angegebenen Reihenfolge ausgeführt werden. Arbeiten Sie beispielsweise mit definierten Datenstrukturen, können Sie diese im initialization-Abschnitt initialisieren.

Die initialization-Abschnitte von Units, die von Clients eingebunden werden, werden in der Reihenfolge ausgeführt, in der die Units in der uses-Klausel des Clients angegeben sind.
Mit Clients sind Units und DPR-Dateien gemeint, die andere Units einbinden.

Zitat von Bernhard Geyer:
Zitat von jottkaerr:
und es gibt viel zu viele Quelltexte, die sich darauf verlassen. Den auf eine solche Änderung folgenden Aufschrei, auch der eigenen Entwickler, will Embarcadero bzw. Codegear nicht hören.
Ich wüsste nicht wo in unserem Programm die Init-Reihenfolge der Units relevant wäre?
Wenn eine Unit ein globales Objekt bereitstellt, z.B. ein Singleton, muss sichergestellt sein, dass dieses Objekt auch in initialization-Abschnitten von Units, die eben diese Unit einbinden, schon existiert. Das lässt sich nur über eine definierte Abarbeitungsreihenfolge der initialization-Abschnitte erreichen. (Oder durch eine on-the-fly-Erstellung des Singletons. Durch die o.g. Regel kann man sich aber das dazu notwendige Überprüfen, ob das Objekt bereits erzeugt wurde, sparen, wenn das Objekt sowieso in den meisten oder fast allen Fällen benötigt wird.)

Zitat von Bernhard Geyer:
Und da du ja nur auf globale Variablen von Units zugreifen kannst die du auch used ist auf jeden Fall in dieser Unit die initalisierung schon durchgeführt bevor irgendeine Quellcodezeile deiner Unit aufgerufen wird. Es gilt die Regel die taaktaak beschrieben hat.
Habe ich dem irgendwo widersprochen? Ich bezog mich nur auf die Aussage von Christian.

jkr
Jürgen Krämer
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Wann wird initialization von eingebundenen units aufgeru

  Alt 3. Sep 2008, 08:47
Zitat von Bernhard Geyer:
...Quelle?
Zitat von Delphi6-Hilfe:
The initialization sections of units used by a client are executed in the order in which the units appear in the client’s uses clause.
Zitat von BDS 2006-Hilfe:
Der initialization-Abschnitt
...
Für Units in der uses-Liste von Interfaces werden die von einem Client verwendeten initialization-Abschnitte von Units in der Reihenfolge ausgeführt, in der Units in der uses-Klausel des Clients aufgeführt sind.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.864 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Wann wird initialization von eingebundenen units aufgeru

  Alt 3. Sep 2008, 08:57
Zitat von jottkaerr:
Zitat von Bernhard Geyer:
Und da du ja nur auf globale Variablen von Units zugreifen kannst die du auch used ist auf jeden Fall in dieser Unit die initalisierung schon durchgeführt bevor irgendeine Quellcodezeile deiner Unit aufgerufen wird. Es gilt die Regel die taaktaak beschrieben hat.
Habe ich dem irgendwo widersprochen? Ich bezog mich nur auf die Aussage von Christian.
Ok, dann habe ich dich mißverstanden. Ich denke aber auch das sich Christians aussage darauf bezieht das mit einem neuen Delphi z.B. SysUtils früher als Types initialisert wird weil sich in der VCL die Uses-Reihenfolge geändert hat. Das sollte aber zu 99,99% jedem Delphi-Entwickler egal sein da durch seine Uses-Anweisungen seine Initalisation-Abschnitte erst aufgerufen werden wenn sowohl SysUtils als auch Types initalisiert sind, egal in welcher Reihenfolge.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
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 +2. Es ist jetzt 22:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf