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;