Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi RTTI von Methoden ab Delphi ?? (https://www.delphipraxis.net/97083-rtti-von-methoden-ab-delphi.html)

Gruber_Hans_12345 4. Aug 2007 10:35


RTTI von Methoden ab Delphi ??
 
Bevor ich mich nun in die Teifen von RTTI und Methoden sachen stürze, weiss jemand vielleicht ab welcher Delphi Version das überhaupt funktioniert?

Ich möchte gerne von einer meiner Klassen alle published methoden rauslesen, und davon die PARAMETER auslesen.

Die Funktionsnamen bekomme ich alle richtig raus, aber wenn ich die Parameternamen rauslesen möchte, dann bekomme ich nur folgendes :

Code:
Published methods in TMyClass
function FourthPublished({??});
procedure FifthPublished({??});
function SixthPublished({??});
das ist mit TestPubMethod von Hallvard getestet, ich verwende Delphi 6, kann es sein, das die benötigten infos erst ab einem neuerem Delphi drinnen sind?
In anderen Beispielen wird zb auch folgender Compilerdirective verwendet {$METHODINFO ON} ... die kennt Delphi 6 auch nicht, D6 kennt nur {$M+} {$TYPEINFO ON}

sirius 4. Aug 2007 11:48

Re: RTTI von Methoden ab Delphi ??
 
Also in Delphi 7 gibt es tatsächlich die Compilerdirektive $Methodinfo (hab ich bisher noch nie gebraucht).
Und sie bewirkt, dass zu den published Methoden auch die Parameter mit gespeichert werden. (allein mit $M+ bzw. $TYPEINFO on werden nur die Methodennamen ohne Methodentyp und ohne Parameterangaben gespeichert).

Allerdings fand ich die Informationen zu den Parametern beim ersten drüberscheuen etwas anders angeordnet als es Hallvard beschreibt :gruebel:

Gruber_Hans_12345 4. Aug 2007 12:14

Re: RTTI von Methoden ab Delphi ??
 
ah danke, dann kann ich es wohl mit delphi 6 vergessen - hätte mir da sonst noch nen wolf gesucht, wo der fehler liegt.

werde mir vielleicht irgendwann mal ne PE oder so besorgen und schauen, ob es mit so ner version möglich ist die METHODINFO auszulesen ... mein entferntes ziel wäre es, solche published methoden aus einem interpreter heraus aufzurufen (ohne parameter ist es ja absolut keine schwierigkeit, aber mit parameter, und wenn man die parameter im vorfeld nicht kennt ... ?)

sirius 4. Aug 2007 12:50

Re: RTTI von Methoden ab Delphi ??
 
Also ich will nicht sagen, dass es das in D6 nicht gibt. Hast du mal im Speicher direkt nachgeschaut?

Gruber_Hans_12345 4. Aug 2007 13:31

Re: RTTI von Methoden ab Delphi ??
 
also, wenn ich im speicher nachschaue, dann sind dort der reihe nach die Namen der methoden aufgelsitet, dazwischen wenige daten (vermute mal adresse und size), und dann die nächste methodennamen

also parameter namen kann ich nicht entdecken (ausser die sind an einer ganz anderen stelle im speicher)?

sirius 4. Aug 2007 13:41

Re: RTTI von Methoden ab Delphi ??
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Parameternamen sind schon genau an der selbe Stelle (siehe Anhang).

Delphi-Quellcode:
{$METHODINFO ON}
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  published
    procedure AndereProzedur(Parameter1,parameter2:string);
  end;

Gruber_Hans_12345 4. Aug 2007 13:54

Re: RTTI von Methoden ab Delphi ??
 
danke, dann braucht man auf jeden fall das {$METHODINFO ON} und das kann leider Delphi 6 nicht

ohne dem {$METHODINFO ON} sind dort keinerlei zusätzliche infos, nur die methodennamen, und sonst nix

sirius 4. Aug 2007 14:00

Re: RTTI von Methoden ab Delphi ??
 
Naja, war mal interessant zu wissen.
(btw: die Button1click ist ja auch dabei)

Installier dir doch Turbo Delphi Explorer. Dann kannst du noch heute damit rumspielen! (Das ist ja fast eine Werbespruch :mrgreen:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz