AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

Ein Thema von BigAl · begonnen am 13. Mär 2023 · letzter Beitrag vom 13. Mär 2023
 
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#1

Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

  Alt 13. Mär 2023, 09:39
Delphi-Version: 5
Hallo zusammen,

ich kämpfe schon seit ein paar Stunden mit einem eigenartigen Fehler, der vom Delphi-Compilers geworfen wird. Der Fehler kommt sowohl in Delphi 10 als auch 11. Ich habe den Code mal soweit reduziert wie irgend möglich um den Fehler zu reproduzieren:

Delphi-Quellcode:
program RecTest;

uses
  System.SysUtils,
  System.Variants;

type
  TMyClass = class
  public type
    TRec = record
      class operator Initialize(out Dest: TRec);
    end;
  private
    FRecs: TArray<TMyClass.TRec>;
  public
    procedure DoSomething;
  end;

class operator TMyClass.TRec.Initialize(out Dest: TRec);
begin
end;

procedure TMyClass.DoSomething;

  procedure PerformRec(ARec: TRec);
  begin
  end;

var
  V: Variant;
begin
  V.A.B := 5;

  for var Rec in FRecs do
    PerformRec(Rec);
end;

var
  MyClass: TMyClass;
begin
  MyClass := TMyClass.Create;
  try
    MyClass.DoSomething;
  finally
    MyClass.Free;
  end;
end.
Die Fehlermeldung lautet "[dcc32 Error] RecTest.dpr(34): E2010 Incompatible types: 'TVarData' and 'Pointer'" und wird immer beim "end" von "DoSomething" ausgegeben, uanabhängig was noch an Code in der Methode ist. Das "AVariant.A.B" ist im echten Programm z.B. ein Range-Object aus Excel. Sieht z.B. so aus:

AExcel.Range(2, Line, 3, Line).Borders[xlEdgeBottom].LineStyle := xlContinuous; Ändere ich den Quelltext wie folgt, dann funktioniert es und es kommt keine Fehlermeldung:

Delphi-Quellcode:
procedure TMyClass.DoSomething;
type
  PRec = ^TRec;

  procedure PerformRec(ARecPtr: PRec);
  begin
  end;

var
  V: Variant;
begin
  V.A.B := 5;

  for var Rec in FRecs do
    PerformRec(@Rec);
end;
Auch wenn ich die Initialisierung aus TRec nehme kommt kein Fehler:

Delphi-Quellcode:
type
  TMyClass = class
  public type
    TRec = record
    end;
  private
    FRecs: TArray<TMyClass.TRec>;
  public
    procedure DoSomething;
  end;
Scheint also auch irgendwas mit managed Records zu tun zu haben.

Hat irgendwer eine Idee was das sein kann? Der Fehler wird sowohl vom Comiler als auch vom LSP angezeigt.
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 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