Auflisten aller Delphi-Klassen, die eine bestimmte Schnittstelle implementieren?

8

Kann eine Delphi-Anwendung (zur Laufzeit) mit der neuen erweiterten RTTI in Delphi 2010 eine Liste aller Klassen erstellen, die eine bestimmte Schnittstelle implementieren?

    
mjn 06.02.2010, 21:08
quelle

1 Antwort

20

Technisch ja, solange die Schnittstelle eine GUID hat und die Klassen, die Sie interessieren, in den Schnittstellenabschnitten von Einheiten sind.

Die RTTI-Einheit verfügt (noch) nicht über eine API zur Beschreibung aller Schnittstellen, die eine Klasse implementiert, aber die Daten sind im Typ info.

Die GUID für einen Schnittstellentyp kann von diesem Ausdruck abgerufen werden:

%Vor%

oder:

%Vor%

Die Klasse des Instanztyps kann dann mit TClass.GetInterfaceEntry(IID) überprüft werden - wenn sie nicht-null zurückgibt, implementiert die Klasse die Schnittstelle.

Alle in Schnittstellenabschnitten von Einheiten deklarierten Klassen können über TRttiContext.GetTypes abgerufen werden.

Das Schreiben des tatsächlichen Iterations- und Extraktionscodes wird dem Leser als Übung überlassen.

    
Barry Kelly 06.02.2010, 22:23
quelle