2016-04-05 10 views
1

Ich würde gerne die Prinzipien des Hinzufügens von Methoden zu RTTI verstehen (ich meine die alte, die von alten Delphi-Versionen (vor Delphi 2010) oder von FPC unterstützt wird). Soweit ich weiß, soll die RTTI Informationen über veröffentlichte Methoden haben. Aber das folgende Beispiel funktioniert nicht in meinem Fall:Delphi: Welche Methoden sollen in RTTI sein?

{$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 

Ich möchte verstehen, was ich ändern müssen PPropInfo für das Verfahren zu erhalten.

Ich möchte die PTypeInfo für die Methode abrufen. Im Falle einer Eigenschaft kann es über

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

abgerufen werden Ich brauche so etwas für Methoden.

+2

[ 'GetPropInfo'] (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/[email protected]@string.html) wird für Eigenschaften verwendet, nicht für Methoden ... – whosrdaddy

+0

@whosrdaddy okay, ich brauche das Äquivalent davon dann. Schließlich möchte ich TTypeData für die Methode abrufen. – Int0h

+2

Was Sie brauchen, ist [Method Adresse] (http://docwiki.embarcadero.com/Libraries/Seattle/de/System.TObject.MethodAddress) –

Antwort

0

Werfen Sie einen Blick auf die mORMot Framework. Es enthält eine ganze Reihe zusätzlicher RTTI-Hilfsfunktionen, einschließlich des sehr praktischen TMethodInfo-Objekts, zusammen mit dieser praktischen Funktion zum Auffüllen.

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