![]() |
Problem wenn Compiler Optimierung aktiv
Hallo,
folgende Routine macht Probleme wenn ich den Compiler Direktiven die Optimierung einschalte. Ich erhalte die Fehlermedung "Eintrag kann nicht eingefügt werden". Ist die Optimierung ausgeschaltet läuft alles gut. Es handelt sich um ein normales TTreeview, als Start Parameter für ParentNode wird nil übergeben. LoadFolder(nil, NameSpace.Folders);
Code:
Mir scheint es so zu sein, dass beim rekursiven Aufruf der Bezug zum TreeView verloren geht.
procedure LoadFolder(ParentNode: TTreeNode; Folder: OleVariant);
var i: Integer; node: TTreeNode; li :string; begin for i := 1 to Folder.Count do begin li := Folder.Item[i].DefaultMessageClass; if AnsiSameText(li,'IPM.Contact') then node := tvFolders.Items.AddChild(ParentNode{ nd }, Folder.Item[i].Name); LoadFolder(node, Folder.Item[i].Folders); end; end; Jemand eine Idee? Plattform: D5 unter Win7. Gruss Thomas |
AW: Problem wenn Compiler Optimierung aktiv
Ist das gewollt, dass die Schleife von 1 bis Count zählt und nicht von 0 bis Count-1?
|
AW: Problem wenn Compiler Optimierung aktiv
Wenn nicht zufällig der erste Node auf die if-Bedingung passt, ist node nicht definiert. Was auch immer da drin steht kann mit und ohne Optimierung anders sein.
|
AW: Problem wenn Compiler Optimierung aktiv
Zitat:
|
AW: Problem wenn Compiler Optimierung aktiv
Hallo,
Das Problem ist gelöst. Die fehlende Initialisierung von node war das Problem. Manchmal sieht man den Wald wegen der Bäume nicht. Was mich jedoch verwirrte, war der Umstand, dass bei ausgeschalteter Optimierung alles wunschgemäß war. Sonst wäre ich vielleicht noch selbst drauf gekommen. Danke. Gruss |
AW: Problem wenn Compiler Optimierung aktiv
Zitat:
|
AW: Problem wenn Compiler Optimierung aktiv
Ohne Optimierung ist die Lebensdauer von lokalen Variablen fast immer von BEGIN bis END.
Mit Optimierung sagt sich Delphi "vor der ersten und nach der letzen Benutzung brauch ih diese Variable eh nicht mehr, also fliegt sie raus. und wenn ich glück hab, dann kann das ich auch nur mal kurz in ein Register schupsen, ohne daß ich wertvollen Stack dafür verschwenden muß.". (es gibt nur ein paar gemanagte Typen, die immer etwas aus der Reihe tanzen, z.B. lange Strings, dynArrays und Interfaces) Und wenn man die Warnungen beachtet, dann verändert die Optimierung das Verhalten eigentlich nicht. |
AW: Problem wenn Compiler Optimierung aktiv
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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