Einzelnen Beitrag anzeigen

Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
110 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 18. Jun 2024, 13:22
Bei welchem Code habt ihr denn Probleme?
Im Grunde so wie oben im 1. Beitrag schon beschrieben; hier mal mein Beispiel:
Delphi-Quellcode:
uses
  ..., Contnrs;
type
  TBauteil = class(TObject)
    ID : Integer;
    Name : string;
  end;

  TBauteilList = class(TObjectList)
  private
    function GetItem(ndx: Integer): TBauteil;
  public
    property Items[ndx: Integer]: TBauteil read GetItem; default;
  end;

{ TBauteilList }

function TBauteilList.GetItem(ndx: Integer): TBauteil;
begin
  Result := TBauteil(inherited Items[ndx]);
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  LBauteilList : TBauteilList;
  LBauteil1 : TBauteil;
  LBauteil2 : TBauteil;
  i : Integer; { 3 }
begin
  LBauteilList := TBauteilList.Create(True);
  try
    for i := 0 to LBauteilList.Count-1 do
    begin
      LBauteil1 := LBauteilList[i]; { 1 }
      LBauteil2 := LBauteilList[LBauteilList.Count-1]; { 2 }

      if Assigned(LBauteil1) and Assigned(LBauteil2) then ;
    end;
  finally
    LBauteilList.Free;
  end;
end;
(Ja, die Liste ist leer. Aber es geht um einen Fehler beim compilieren für Win64.)

Delphi 11.3: compiliert ohne Fehler.
Delphi 12.1: In der mit { 2 } markierten Zeile "E2010 Incompatible types: 'TBauteil' and 'TObject'"

Tausche ich in der Klasse TBauteilList den Datentyp für ndx in "NativeInt", dann dreht sich das Verhalten um:

Delphi 11.3: In der mit { 1 } markierten Zeile: "E2010 Incompatible types: 'TBauteil' and 'TObject'"
Delphi 12.1: compiliert ohne Fehler.

Nächster Versuch:
Die Laufvariable "i" (Markierung { 3 }) ändern von Integer nach NativeInt:

Delphi 11.3: Fehler in der Zeile { 2 }
Delphi 12.2: kein Fehler.

Gibt es eine allgemeingültige Lösung?
Von dieser Art Listen -- von TObjectList abgeleitet -- haben wir jede Menge.

Gruß
Achim

Geändert von Achim Kalwa (18. Jun 2024 um 13:23 Uhr) Grund: Tippfehler
  Mit Zitat antworten Zitat