2010-02-06 14 views

Respuesta

20

Técnicamente sí, siempre que la interfaz tenga un GUID y las clases que le interesan se encuentran en las secciones de interfaz de las unidades.

La unidad RTTI no tiene (todavía) una API para describir todas las interfaces que implementa una clase, pero los datos están en la información de tipo.

el GUID de un tipo de interfaz puede ser obtenido a partir de esta expresión:

GetTypeData(TypeInfo(ITheInterface))^.Guid 

o:

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

La clase del tipo de instancia a continuación, se puede comprobar utilizando TClass.GetInterfaceEntry(IID) - si se devuelve un valor no -nil, la clase implementa la interfaz.

Todas las clases declaradas en las secciones de interfaz de las unidades pueden recuperarse a través del TRttiContext.GetTypes.

Escribir el código de iteración y extracción real se deja como un ejercicio para el lector.

Cuestiones relacionadas