Delphi: Какие методы должны быть в RTTI?

Я хотел бы понять принципы добавления методов в RTTI (я имею в виду старый, который поддерживается старыми версиями Delphi (до Delphi 2010) или FPC). Насколько я знаю, RTTI должен иметь информацию об опубликованных методах. Но следующий пример не работает в моем случае:

{$M+}
  TMyClass = class  
    published
      procedure testfn(a,b,c: Integer);
  end;
{$M-}

...

procedure TMyClass.testfn(a,b,c: Integer);
begin
    ShowMessage('s');
end;

...

GetPropInfo(TMyClass, 'testfn'); // returns nil

Я хотел бы понять, что мне нужно изменить, чтобы получить PPropInfo для метода.

Я хочу получить PTypeInfo для метода. В случае собственности это может быть восстановлено через

PropInfo := GetPropInfo(...); 
TypeInfo := PropInfo^.PropType; 
TypeData := GetTypeData(TypeInfo);

Мне нужно что-то подобное для методов.

1 ответ

Посмотрите на MORMot Framework. Он включает в себя целый набор дополнительных вспомогательных функций RTTI, в том числе очень удобный объект TMethodInfo вместе с этой удобной функцией для его заполнения.

/// retrieve a method RTTI information for a specific class
function InternalMethodInfo(aClassType: TClass; const aMethodName: ShortString): PMethodInfo;
Другие вопросы по тегам