![]() |
AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
Wie wäre es denn damit:
Delphi-Quellcode:
type
{$IF CompilerVersion < 36.0 Delphi 12 Athens } TListIndex = Integer; {$ELSE} TListIndex = NativeInt; {$ENDIF} type TBauteil = class(TObject) ID : Integer; Name : string; end; TBauteilList = class(TObjectList) private function GetItem(ndx: TListIndex): TBauteil; public property Items[ndx: TListIndex]: TBauteil read GetItem; default; end; |
AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
.. wenn Du
Delphi-Quellcode:
sollte es bei beiden Varianten funktionieren.
LBauteil2 := TBauteil(LBauteilList[LBauteilList.Count-1]); { 2 }
Warum bei NativeInt ein Cast ( in Delph 11.3) notwendig ist - entzieht sich meiner Kenntnis. Grüße Klaus |
AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
Delphi prüft/vergleicht jetzt auch Alias-Deklarationen stärker.
Delphi-Quellcode:
Früher war MyInt1 und Integer das "Gleiche" ... jetzt eventuell nicht mehr.
type
MyInt1 = Integer; MyInt2 = type Integer; z.B. auch im CodeInsight und der CodeCompletion zu sehen, wo du beim SendMessage jetzt LPARAM und WPARAM als Typen siehst, und nicht mehr Integer (Win32). Und bezüglch NativeInt wurde früher in Win32 es überall als "Integer" angezeigt ... jetzt als "NativeInt". In Win64 wurde NativeInt früher als irgenwas wie Int64 (weiß nicht genau) und jetzt ebenfalls als NativeInt. Aus Sicht des Laufzeitcodes ist es nicht verständlich, aber aus Sicht des Entwicklers ist es eigentlich schön (wobei des nett wäre, wenn beides gezeigt würde ... wie die Deklaration ist und was "wirklich" der Typ ist) |
AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
Zitat:
Delphi-Quellcode:
In {1} wird ein Integer übergeben, was auf die Deklaration in TBauteilList.Items aufgelöst wird. In {2} is LBauteilList.Count aber ein NativeInt, was bei der Subtraktion erhalten bleibt. Das wird dann unter Win64 auf TObjektList.Items aufgelöst und führt zu dem Incompatible Types Fehler.
LBauteil1 := LBauteilList[i]; { 1 }
LBauteil2 := LBauteilList[LBauteilList.Count-1]; { 2 } |
AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
Zitat:
Angesichts dessen, dass ja ohnehin etwas geändert werden muss, stellt sich aber hier denke ich schon die Frage, ob ein Umbau auf Generics nicht die sinnvollere Lösung wäre. Denn die Änderungen sollten sich ja auf die Klassen beschränken, die Nutzung sollte ja gleich bleiben. Bevor man da ggf. irgendwann noch einmal ran muss... |
AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
[QUOTE=Uwe Raabe;1537913]Wie wäre es denn damit:
Delphi-Quellcode:
Genau diese Idee hatte ich auch schon. Der Anpassungsaufwand ist aber enorm; ich muss ja nicht nur die jeweiligen List-Klassen anpassen; sondern überall im Code auch die Index-Variablen.
type
{$IF CompilerVersion < 36.0 Delphi 12 Athens } TListIndex = Integer; {$ELSE} TListIndex = NativeInt; {$ENDIF} |
AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
Zitat:
Kannst Du auch noch erklären, warum das Problem bei TBauteilList = TObjectList<TBauteil> nicht auftritt, auch wenn meine Index-Variable vom Typ "Integer" ist... |
AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
Zitat:
|
AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
Zitat:
Dann werde ich wohl die Generics einsetzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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