Недавно мне удалось получить TRttiType для интерфейса с помощью TRttiContext.FindType с помощью Robert Loves «GetType» — обходной путь («регистрация» интерфейса явным вызовом ctx.GetType, например, RType := ctx.GetType(TypeInfo(IMyPrettyLittleInterface));).
Следующим логическим шагом будет повторение методов указанного интерфейса. Рассмотреть возможность
program rtti_sb_1;
{$APPTYPE CONSOLE}
uses
SysUtils, Rtti, mynamespace in 'mynamespace.pas';
var
ctx: TRttiContext;
RType: TRttiType;
Method: TRttiMethod;
begin
ctx := TRttiContext.Create;
RType := ctx.GetType(TypeInfo(IMyPrettyLittleInterface));
if RType <> nil then begin
for Method in RType.GetMethods do
WriteLn(Method.Name);
end;
ReadLn;
end.
На этот раз мой mynamespace.pas
выглядит так:
IMyPrettyLittleInterface = interface
['{6F89487E-5BB7-42FC-A760-38DA2329E0C5}']
procedure SomeProcedure;
end;
К сожалению, RType.GetMethods
возвращает экземпляр TArray нулевой длины. Есть ли у кого-нибудь возможность воспроизвести мои проблемы? (Обратите внимание, что в моем примере я явно извлек TRttiType, используя TRttiContext.GetType, а не обходной путь; введение включено, чтобы предупредить читателей о том, что могут быть некоторые нерешенные проблемы, связанные с rtti и интерфейсами.) Спасибо!