Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi RTTI-Informationen zur Laufzeit erstellen? (https://www.delphipraxis.net/161401-rtti-informationen-zur-laufzeit-erstellen.html)

FredlFesl 1. Jul 2011 18:30

Delphi-Version: 2007

RTTI-Informationen zur Laufzeit erstellen?
 
Hi,

Eine Anwendung extrahiert zur Laufzeit RTTI-Informationen aus einer Klassenfamilie. Diese Klassenfamilie repräsentiert externe Daten.
Die Informationen werden in Dropdown-Listen dargestellt, damit wird etwas ähnliches wie ein Databinding auf Objektbasis implementiert.

Ändert sich die Struktur der externen Daten, wird ein Codegenerator angeschmissen, der eine neue Unit mit eben dieser Klassenfamilie erzeugt. Daraufhin wird das Programm neu kompiliert und schlußendlich steht die neue Information als RTTI im Programm zur Verfügung.

Kann man das auch zur Laufzeit machen? Könnte ich also die Struktur zur Laufzeit einlesen und die RTTI-Tabellen per Hand zusammenbauen, sodaß man den Unterschied gar nicht merkt?

Uwe Raabe 1. Jul 2011 19:21

AW: RTTI-Informationen zur Laufzeit erstellen?
 
Vielleicht ist dies im Zusammenhang hiermit ja hilfreich?

FredlFesl 1. Jul 2011 19:25

AW: RTTI-Informationen zur Laufzeit erstellen?
 
Bingo. Schau ich mir am Montag genauer an. Das sollte es sein...

sx2008 2. Jul 2011 01:38

AW: RTTI-Informationen zur Laufzeit erstellen?
 
Zitat:

Zitat von FredlFesl (Beitrag 1109509)
damit wird etwas ähnliches wie ein Databinding auf Objektbasis implementiert.

Heisst das dann, dass die Klassen eigentlich nur aus published Properties bestehen?
Also ungefähr so:
Delphi-Quellcode:
TGenerierteKlasse=class(TObject)
published
  property ArtikelName:String; // das read & write schenk ich mir in diesem Beispiel
  property Gewicht:Double;
  property Preis:Currency;
...
end;
Die Klasse besteht dann nur aus Properties, die man über RTTI abfragen kann.

Sollte dem so sein, dann gibt es andere Möglichkeiten (ohne RTTI) die besser funktionieren und keine programmiertechnischen Tricks (RTTI zur Laufzeit erzeugen) benötigen.

FredlFesl 4. Jul 2011 19:38

AW: RTTI-Informationen zur Laufzeit erstellen?
 
Zitat:

Zitat von sx2008 (Beitrag 1109543)
Die Klasse besteht dann nur aus Properties, die man über RTTI abfragen kann.
Sollte dem so sein, dann gibt es andere Möglichkeiten (ohne RTTI) die besser funktionieren und keine programmiertechnischen Tricks (RTTI zur Laufzeit erzeugen) benötigen.

Ich meine, schon. Das Problem ist, das wir eine bestehende Anwendung haben, die die Informationen -denke ich- per RTTY ermittelt.
Auf jeden Fall ist es so, das derzeit die Klassenfamilie per Codegenerator erstellt und in eine BPL reinkompiliert wird. die dient dann als 'Quelle' der Datenverbindungen. Sobald ich mir den Code angeschaut habe, weiss ich mehr.

Welche 'anderen' Möglichkeiten gäbe es denn?

martin_ 23. Aug 2011 12:21

AW: RTTI-Informationen zur Laufzeit erstellen?
 
Hallo,
habe das gleiche Problem wie in #4 beschrieben.

[QUOTE=sx2008;1109543]
Zitat:

Zitat von FredlFesl (Beitrag 1109509)
Sollte dem so sein, dann gibt es andere Möglichkeiten (ohne RTTI) die besser funktionieren und keine programmiertechnischen Tricks (RTTI zur Laufzeit erzeugen) benötigen.

Wie lässt sich das lösen?

stahli 23. Aug 2011 12:44

AW: RTTI-Informationen zur Laufzeit erstellen?
 
Die RTTI sind keine Tricks.
Ab D2010 sind sie sehr leistungsfähig und in Verbindung mit Attributen sehr nützlich, um Klassen und Objekte zu analysieren und zu serialisieren.
Daniel hatte ein interessantes Video zu D2010 und ist auch auf diese Themen genauer eingegangen.
Wenn Du ein älteres Delphi hast, wird es schwieriger.

martin_ 23. Aug 2011 13:03

AW: RTTI-Informationen zur Laufzeit erstellen?
 
Ja, Delphi 2010.
Dort
http://www.delphipraxis.net/140771-d...idiver%99.html
funktioniert leider der Link nicht.

stahli 23. Aug 2011 13:09

AW: RTTI-Informationen zur Laufzeit erstellen?
 
Wer traut sich, mit dem Chef zu schimpfen? :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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