Moin,
hier geht es jetzt mal nicht um was Wichtiges/Schlimmes.
Ich wollte einfach nur mal soeinen kleinen Überblick erlangen, in wie weit eigentlich die
RTTI verwendet wird.
Wer nutzt denn die
RTTI?
Vorallem wie oft, in welchem Umfang und wofür eigentlich?
Lieber die Alte, oder doch eher die Neue/Erweiterte? (hier ist, für ältere Delphis, die Antwort schon klar)
Die alte
RTTI ist oftmals leichtgewichtiger/flotter und nicht alles der alten
RTTI findet sich (genauso einfach) in der neuen erweiterten
RTTI.
Die neue
RTTI hat mit Multithreading eventuell einige Problemchen (da werden globale Instanzen verwendet), während die Alte meist nur blind direkt auf schreibgeschützten Pointern arbeitet und da praktisch nichts passieren kann.
* Daten/Objekte (de)derialisieren, für Speicherung/übertragung
- über die alte
RTTI aus System/TObject/TypInfo, sowie TReader/Writer (das nutzt auch immernoch die
VCL) und Teilweise auch im Variant (wobei dort oft auch einfach hart gecastet wird)
- oder nur noch mit der neuen
RTTI.pas (TRttiContext)
* Hacking/Bugfixing
- via
RTTI
- über doofe Zeiger "blind" zugreifen
* als zusätzliche Informationsquelle, um die Dokumentation zu ergänzen
* als Hilfe zum Debuggen
- TVirtualMethodInterceptor
- Zugriffe und Daten überwachen/auslesen
...
Und nun noch ein kleiner neugieriger Blick in die
IDE, den die
RTTI lässt sich ja nicht nur im eigenen Programm benutzen.
Da speichert die
RTTI standardmäig jede Kleinigkeit, außer da, wo sie doch praktisch wäre. (bei Interfaces, wenn nicht explizit mit
{$M+}
deklariert)
Von fast 8500 Interfaces besitzen nur 40 ein paar mehr Infos (wie z.B. Name und Deklaration der Methoden), als nur die IID (
GUID),
Unit der Deklaration und die Anzahl der Methoden.
Aber witzig ist, daß die gesamte
RTTI der Delphi XE3 Prof-
RTL/
VCL/FMX/
IDE als Text nur 21 MB groß ist und schlappe 40800 Typen umfasst, davon etwa 17000 Klassen und 8500 Interfaces.
Im
RAD Studio XE6 Architekt Trial sind es 23 MB und genau 46000 Typen (inkl. meiner 2 Test-Interfaces), davon 11444 Interfaces ohne und 7 mit Methoden-
RTTI. (das Fehlende waren zufällig die MSXML6-Interfaces in einer gewissen DevJET_DI_XE3_Express.dll)
Nja, ein passendes Interface hab ich wenigstens gefunden, für eine geplante
IDE-Erweiterung ... jetzt nur noch rausfinden, wie man es genau benutzt, denn es gibt nirgendwo Infos. Google kennt nur 2 Steiten, wo das Interface zufällig in einem Stacktrace auftaucht und die 2 Kommentare der OpenToolsAPI sind eher als spärlich zu bezeichnen. (aber das ist hier erstmal egal)