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
Thema durchsuchen
Ansicht
Themen-Optionen

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
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#1

AW: Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

  Alt 13. Mär 2023, 09:43
Der Fehler kommt auch nicht, wenn man die Variant-Zuweisung raus nimmt.

Update:
Delphi-Quellcode:
 V := 5 // geht
 V.A := 5 // geht
 V.A.B := 5; // geht nicht
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BigAl

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

AW: Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

  Alt 13. Mär 2023, 09:46
Der Fehler kommt auch nicht, wenn man die Variant-Zuweisung raus nimmt.
Klar. Hatte ich vergessen. Aber das ist halt die Konstellation die ich im Programm habe. Das sieht dann im Programm z.B. so aus:

Delphi-Quellcode:
  ...
  AExcel.Cell[2, Line] := 'Content';
  AExcel.Range(2, Line, 3, Line).Font.Bold := True;
  AExcel.Range(2, Line, 3, Line).Borders[xlEdgeBottom].LineStyle := xlContinuous;
  AExcel.Range(2, Line, 3, Line).MergeCells := True;

  for var Page in FPages do
    ShowPages(Page, Line);

  // Show all parameters left aligned.
  AExcel.Range(CellStart, AExcel.Cell[2, Line]).HorizontalAlignment := xlLeft;
  ...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#3

AW: Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

  Alt 13. Mär 2023, 09:47
So geht's auch:

Delphi-Quellcode:
procedure TMyClass.DoSomething;

  procedure PerformRec(ARec: TRec);
  begin
  end;

  procedure SetVariant(var V: Variant);
  begin
    V.A.B := 5;
  end;

var
  V: Variant;
begin
  SetVariant(V);

  for var Rec in FRecs do
    PerformRec(Rec);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#4

AW: Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

  Alt 13. Mär 2023, 09:49
Oder so:
Delphi-Quellcode:
procedure TMyClass.DoSomething;

  procedure PerformRec(ARec: TRec);
  begin
  end;

  procedure IterateRecs;
  begin
    for var Rec in FRecs do
      PerformRec(Rec);
  end;

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

  IterateRecs;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#5

AW: Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

  Alt 13. Mär 2023, 09:51
Unabhängig von den Workarounds würde ich den Testcode in QP melden. Das sollen sich die Compiler-Freaks mal ansehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BigAl

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

AW: Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

  Alt 13. Mär 2023, 10:00
Unabhängig von den Workarounds würde ich den Testcode in QP melden. Das sollen sich die Compiler-Freaks mal ansehen.
Werde ich tun. Du hast mich aber auf eine Idee für einen Workaround gebracht der funktioniert:
Delphi-Quellcode:
procedure TMyClass.DoSomething;

  procedure PerformRec(ARec: TRec);
  begin
  end;

  procedure Blub;
  begin
    for var Rec in FRecs do
      PerformRec(Rec);
  end;

var
  V: Variant;
begin
  V.A.B := 5;
  Blub;
end;
Ist mir lieber als den Parameter als Pointer zu übergeben...

Ich brauche das "PerformRec" genau an dieser Stelle. Es handelt sich dabei um eine rekursive Prozedur die eine Baumstruktur verarbeitet. Diese sieht etwa so aus:
Delphi-Quellcode:
  procedure ShowPages(APage: TPage; var Line: Integer);
  begin
    { ... }
    Inc(Line);
    for var Page in APage.SubPages do
      ShowPages(Page, Line);
  end;
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
BigAl

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

AW: Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

  Alt 13. Mär 2023, 10:16
Hoffe das reicht so: RSP-41161
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#8

AW: Unverständliche Fehlermeldung E2010 in Verbindung mit Varianten

  Alt 13. Mär 2023, 10:55
Sehr schön. Ich habe das mal entsprechend kommentiert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:53 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