2016-04-05 14 views
1

Я хотел бы понять принципы добавления методов к RTTI (я имею в виду старый, который поддерживается старыми версиями Delphi (до Delphi 2010) или FPC). Насколько я знаю, RTTI должен иметь информацию об опубликованных методах. Но следующий пример не работает в моем случае:Delphi: Какие методы должны быть в 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); 

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

+2

[ 'GetPropInfo'] (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/[email protected]@string.html) используется для свойств не для методы ... – whosrdaddy

+0

@whosrdaddy в порядке, мне нужно его эквивалент. В конце концов я хочу получить TTypeData для этого метода. – Int0h

+2

Что вам нужно [Адрес метода] (http://docwiki.embarcadero.com/Libraries/Seattle/en/System.TObject.MethodAddress) –

ответ

0

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

/// retrieve a method RTTI information for a specific class 
function InternalMethodInfo(aClassType: TClass; const aMethodName: ShortString): PMethodInfo; 

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

  • Нет связанных вопросов^_^