2016-04-05 6 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を取得します。プロパティの場合は、

で取得できます。メソッドの場合は、そのようなものが必要です。

+2

[ 'GetPropInfo'(http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/[email protected]@st​​ring.html)の特性のためではないために使用されますメソッド... – whosrdaddy

+0

@whosrdaddy大丈夫、私はそれと同等のものが必要です。最終的には、メソッドのTTypeDataを取得したいと思います。 – Int0h

+2

あなたが必要とするのは、[方法アドレス](http://docwiki.embarcadero.com/Libraries/Seattle/en/System.TObject.MethodAddress)です。 –

答えて

0

mORMot Frameworkをご覧ください。これには、非常に便利なTMethodInfoオブジェクトと、この便利な関数を組み込むためのRTTYヘルパー関数が含まれています。

/// retrieve a method RTTI information for a specific class 
function InternalMethodInfo(aClassType: TClass; const aMethodName: ShortString): PMethodInfo; 
関連する問題