Zitat:
gibt es noch eine enumeration der registrierten klassen?
Du hast es schon gesagt: RegisterClass() und GetClass() sind die Wege die die Borlandianer vorgesehen haben. Allerdings hast du natürlich mit EnumTypeInfo() nun Zugriff auf alle
RTTI aller geladenen Module und ergo auch auf alle Klassen die in der Anwednung verwendet werden. Also nicht nur diejenigen die mit RegisterClass() registriert worden, sondern als ALLE. Auch diejenigen die private sind und in einer normalen Anwendung garnicht Unitübergreifend angesprochen werden können.
Eine
RTTI wird erzeugt für JEDEN deklarierten Typ der im Delphi Source deklariert wurde und auch duch die Anwednung tatsälchich benutzt wurde. Das umfast Sets, Mengen, ordinale Typen wie Char/Integer, komplexe Typen with TMethod, TClass, TObject, Komponenten und sogar Interfaces.
Die einzisgte Ausnahme wären lokale Typen die lokal in einer Prozedur/Funktion deklariert wurden.
Mit EnumTypeInfo() kannst du mit ATypeInfo.Kind = tkClass und mit nach folgendem GetTypData(ATypeInfo).ClassType die TClass einer TypInfo in Erfahrung bringen. Du kannst also EnumTypeInfo() so umbauen das sie das gleiche wie GetClass() macht aber OHNE mit RegisterClass() und eigener Liste zu arbeiten.
Allerdings, aus Gründen der Portierbarkeit und Anwendungssicherheit würde ich eben eine eigene RegisterClass() Funktionalität der EnumTypeInfo() vorziehen. Eben weil EnumTypeInfo() auf ein Verhalten des Compilers/Linkers beruht das nicht nur undokumentiert ist sondern sogar Borland unbekannt scheint. Das heist aber nun auch nicht das man EnumTypeInfo() verteufeln sollte
denn nach meinen Erfahrungen hat sich seit Delphi 2 rein garnischts an der Funktion von EnumTypeInfo() verändert. Heist also EnumTypeInfo() läuft sehr stabil mit allen Delphi/BCB Versionen und wird es meiner Meinung nach auch so lange beiben bis wir einen komplett neuen Compiler/Linker samt
VCL erleben. Die Veränderungen der
RTTI im Compiler dürften so gravierend sein das es ein komplett neuer Compiler wäre. Immerhin sind die RTTIs quasi Übereste von Datenstrukturen die der Compiler selber während des Compilierungsprozeses benötiggt und erzeugt. Ähnliche, ja fast sogar identische, Datenstrukturen wird man in
DCU und den DSM Dateien wiederfinden. Übertragen findet man dies auch bei den Packages und den DCP Dateien.
Gruß Hagen