Bei Units, welche unter Interface eingebunden werden, wird die Initialisation immer vorher abgearbeitet, als die Initialisation der einbindenden
Unit.
Bei Einbindung in der Implementation ist keine Reihenfolge sichergestellt.
Also entweder du greifst nur auf Units (und deren Inhalt) zu, welcher überimplementation eingebunden und rechtzeitig initialisiert werden.
Oder du prüfst beim Zugriff nach und verschiebst die Initialisation.
Letzeres z.B. so:
Delphi-Quellcode:
funktion gibObjekt: TObject;
begin
if not assigned(globalVar) then
globalVar := TMeinObjekt.Create;
Result := globalVar;
end;
[edit]
Zitat:
Die
Unit an Anfang der Uses-Klausel schreiben?
Klappt nicht zuverlässig, da sich hier die Reihenfolgen aller Uses-Klauseln des gesamten Projekts gegenseitig beeinflussen.
Nur bei den Uses in der
DPR kann man sich relativ sicher sein, daß die erste
Unit auch als erstes Initialisert wird (wenn man die Units SysInit und System ignoriert).