AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi RTTI und EComponentError beim Auslesen der Eigenschaften
Thema durchsuchen
Ansicht
Themen-Optionen

RTTI und EComponentError beim Auslesen der Eigenschaften

Ein Thema von Whookie · begonnen am 31. Jul 2018 · letzter Beitrag vom 1. Aug 2018
Antwort Antwort
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#1

RTTI und EComponentError beim Auslesen der Eigenschaften

  Alt 31. Jul 2018, 22:53
Delphi-Version: 5
Ich spiele gerade ein wenig mit dem RTTI und wollte alle Eigenschaften eines TForm ausgeben. Dabei bekomme ich bei der Eigenschaft 'ComObject' einen EComponentError mit der Medung 'TForm1' wurde nicht als COM-Klasse registriert.

Folgenden Code führe ich auf einer MainForm mit einem TMemo aus:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  ctx: TRttiContext;
  lty: TRttiType;
  lprops: TArray<TRttiProperty>;
  lprop: TRttiProperty;
  lval: TValue;
begin
  IntValue := 1234;
  StrValue := 'Hello world';
  //
  ctx := TRttiContext.Create;
  lty := ctx.GetType(ClassType);

  lprops := lty.GetProperties;
  for lprop in lprops do
  begin
    if lprop.IsReadable then
    begin

      lval := lprop.GetValue(Self); // EComponentError bei ComObject
      memo1.lines.Add(format('%s = %s', [lprop.Name, lval.ToString]));
    end
    else
      memo1.lines.Add(format('%s', [lprop.Name]));
  end;
  ctx.Free;
end;
Gibt es eine Möglichkeit den Fehler zu vermeiden, bzw. sollte lval nicht einfach (empty) zurückliefern?
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: RTTI und EComponentError beim Auslesen der Eigenschaften

  Alt 31. Jul 2018, 23:33
Gibt es eine Möglichkeit den Fehler zu vermeiden, bzw. sollte lval nicht einfach (empty) zurückliefern?
Nur, wenn du das Property in Ruhe lässt. Der Getter wirft eine Exception bevor GetValue überhaupt zurückkehrt. Somit kann in lval auch nichts drin stehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: RTTI und EComponentError beim Auslesen der Eigenschaften

  Alt 1. Aug 2018, 20:49
Nur, wenn du das Property in Ruhe lässt. Der Getter wirft eine Exception bevor GetValue überhaupt zurückkehrt. Somit kann in lval auch nichts drin stehen.
Danke, dann bleibt wohl nur ein try/except als Lösung übrig.
Whookie

Software isn't released ... it is allowed to escape!
  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 16:50 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