Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3 (https://www.delphipraxis.net/214054-delphi-12-tlist-unter-64-bit-funktioniert-nicht-mehr-wie-unter-11-3-a.html)

swestner 10. Nov 2023 13:06

Delphi-Version: 11 Alexandria

Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
 
Hallo,

folgender Code hat mit Delphi 11.3 unter 32 und 64 Bit problemlos compiliert. Mit Delphi 12 32 Bit funktioniert es weiterhin, mit Delphi 12 64 Bit gibt es Fehler:

Delphi-Quellcode:
type TSupBookList = class(TList)
private
     function GetItems(Index: integer): TSupBook;
public
     destructor Destroy; override;
     procedure Clear; override;
     procedure Add(P: PRecSUPBOOK); overload;
     procedure Add(Path,Filename,SheetName: AxUCString); overload;
     function AddEncodec(Tabs: integer; Code: word): integer;
     property Items[Index: integer]: TSupBook read GetItems; default;
end;

type TExternalNames = class(TObject)
private
     FSupBooks: TSupBookList;
public
     procedure SetCRN        (SheetIndex: integer; P: PRecCRN; Size: word);
end;

procedure TExternalNames.SetCRN(SheetIndex: integer; P: PRecCRN; Size: word);
begin
  if FSupBooks.Count <= 0 then
    raise XLSRWException.Create('No SUPBOOK for CRN');
  if SheetIndex >= FSupBooks[FSupBooks.Count - 1].Count then   // <----E2018 Record, object or class type required
    raise XLSRWException.Create('Invalid SUPBOOK Sheet Index');
  FSupBooks[FSupBooks.Count - 1].Sheets[SheetIndex].SetCRN(P,Size); // <----E2018 Record, object or class type required
end;
Wo ist da jetzt das Problem? Zumal alles mit 11.3 funktioniert hat.

Wurde in 12 was an TList geändert?

Grüße

Stefan Westner

Uwe Raabe 10. Nov 2023 13:12

AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
 
Zitat:

Zitat von swestner (Beitrag 1529430)
Wurde in 12 was a TList geändert?

Delphi-Quellcode:
Index
und
Delphi-Quellcode:
Count
sind jetzt
Delphi-Quellcode:
NativeInt
, was unter 64-Bit nicht mehr gleich
Delphi-Quellcode:
Integer
ist. Damit löst
Delphi-Quellcode:
FSupBooks[FSupBooks.Count - 1]
auf das NativeInt
Delphi-Quellcode:
Items
Property von
Delphi-Quellcode:
TList
auf und nicht auf deine Integer Version.

swestner 10. Nov 2023 14:30

AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
 
Heißt das jetzt, daß ich überall machen muß:

Delphi-Quellcode:
{$IFDEF WIN32}
property Items[Index: integer]: TSupBook read GetItems; default;
{$ELSEIF WIN64}
property Items[Index: NativeInt]: TSupBook read GetItems; default;
{$ENDIF}
Oder kann pauschal immer

Delphi-Quellcode:
property Items[Index: NativeInt]: TSupBook read GetItems; default;

verwendet werden?

himitsu 10. Nov 2023 14:47

AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
 
NativeInt ist unter 32 Bit 32 Bit groß und unter 64 Bit natürlich 64 Bit.

im Grunde genommen sieht es quasi so aus
Delphi-Quellcode:
type
  {$IFDEF WIN32}
  NativeInt = Integer; // aka Int32
  {$ELSE}
  NativeInt = Int64;
  {$ENDIF}
https://quality.embarcadero.com/browse/RSP-20886
https://quality.embarcadero.com/browse/RSP-42722
https://www.facebook.com/embarcadero...h7JYZD1KTBhKKl

Es gab aber im QP auch einen eigenen BugReport bezüglich dieses Problems (fand ihn nicht, aber siehe Facebook),
also dass der Typ "NativeInt" nun strenger geprüft wird
und unter Win64 dann plötzlich Int64 und NativeInt nicht "identisch" sind, obwohl sie eigentlich gleich sind.

Uwe Raabe 10. Nov 2023 14:50

AW: Delphi 12 / TList unter 64 Bit funktioniert nicht mehr wie unter 11.3
 
Zitat:

Zitat von swestner (Beitrag 1529439)
Oder kann pauschal immer

property Items[Index: NativeInt]: TSupBook read GetItems; default;

verwendet werden?

Genau so ist das gedacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz