2010-02-06 4 views

ответ

20

Технически да, если интерфейс имеет идентификатор GUID, а классы, о которых вы заботитесь, находятся в разделах интерфейса устройств.

Модуль RTTI еще не имеет API для описания всех интерфейсов, которые реализует класс, но данные находятся в информации типа.

идентификатор GUID для типа интерфейса может быть получен из этого выражения:

GetTypeData(TypeInfo(ITheInterface))^.Guid 

или:

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

Класса типа экземпляра, то можно проверить с помощью TClass.GetInterfaceEntry(IID) - если она возвращает ненулевой -но, класс реализует интерфейс.

Все классы, объявленные в разделах интерфейса блоков, могут быть получены через TRttiContext.GetTypes.

Написание фактического кода итерации и извлечения оставлено в качестве упражнения для читателя.

Смежные вопросы