Einzelnen Beitrag anzeigen

FriendOfDelphi

Registriert seit: 21. Mai 2010
163 Beiträge
 
Delphi 5 Professional
 
#5

AW: Zeitpunkt der Objekterstellung

  Alt 8. Jun 2010, 15:54
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).
Ich habe das Einbinden der betreffenden Unit jetzt vom Bereich "Implementation" in den Bereich "Interface" verschoben.
Die Fehlermeldung kommt aber immer noch.
Auch wenn vor dem Zugriff mit
Delphi-Quellcode:
if not assigned(Unit.Objekt) then
          Unit.Objekt:=TMeinObjekt.Create(self);
prüfe, kommt die Fehlermeldung (in der if-Zeile).
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat