2010-02-06 11 views

risposta

20

Tecnicamente sì, purché l'interfaccia disponga di un GUID e le classi a cui tieni siano nelle sezioni di interfaccia delle unità.

L'unità RTTI non ha (ancora) un'API per descrivere tutte le interfacce implementate da una classe, ma i dati sono nel tipo di informazioni.

Il GUID per un tipo di interfaccia può essere ottenuto da questa espressione:

GetTypeData(TypeInfo(ITheInterface))^.Guid 

o:

ctx: TRttiContext; 
// ... 
(ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID 

La classe di tipo istanza può quindi essere controllato con TClass.GetInterfaceEntry(IID) - se rinvia non -nil, la classe implementa l'interfaccia.

Tutte le classi dichiarate nelle sezioni di interfaccia delle unità possono essere recuperate tramite TRttiContext.GetTypes.

La scrittura dell'iterazione e del codice di estrazione viene lasciata come esercizio per il lettore.

Problemi correlati