Недавно я смог получить TRttiType для интерфейса, используя TRttiContext.FindType, используя Robert Loves "GetType" -workaround ("регистрация" интерфейса путем явного вызова 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 и интерфейсов.) Спасибо!