Methoden eines Objekts ermitteln
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Methoden eines Objekts ermitteln
Hallo,
ich tue mich gerade irgendwie schwer mit RTTI. Problem ist: ich möchte alle published Methoden eines Objekts auslesen und zwar mit den Infos Methodenname, Parameter und Rückgabewert (so es eine Funktion ist). Dazu dann noch ein Zeiger auf die Methode. Eigentlich dachte ich das wäre mit RTTI problemlos möglich, aber in den Beschreibungen und dem Quellcode sehe ich nur Möglichkeiten um Properties zu ermitteln.
Hab ich irgendetwas übersehen oder ist das gar nicht möglich?
mfg
Michael
ich tue mich gerade irgendwie schwer mit RTTI. Problem ist: ich möchte alle published Methoden eines Objekts auslesen und zwar mit den Infos Methodenname, Parameter und Rückgabewert (so es eine Funktion ist). Dazu dann noch ein Zeiger auf die Methode. Eigentlich dachte ich das wäre mit RTTI problemlos möglich, aber in den Beschreibungen und dem Quellcode sehe ich nur Möglichkeiten um Properties zu ermitteln.
Hab ich irgendetwas übersehen oder ist das gar nicht möglich?
mfg
Michael
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Methoden eines Objekts ermitteln
Ist mir nicht bekannt, dass das geht (Was nicht heissen muss, dass es nicht irgendwie geht).
Methoden von normalen Klassen sind ja auch nicht published.
Was möchtest du denn damit erreichen?
Methoden von normalen Klassen sind ja auch nicht published.
Was möchtest du denn damit erreichen?
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Methoden eines Objekts ermitteln
Jo, aber man kann sie publishen. Das wird ja auch irgendeinen Sinn haben.theo hat geschrieben:Methoden von normalen Klassen sind ja auch nicht published.
Ich möchte eine Liste von Referenzen auf Methoden speichern. Dazu wird einer Prozedur namens RegisterBla ein Objekt übergeben. Die Prozedur ermittelt dann alle published Methoden und speichert die (also einen Zeiger darauf), die einem bestimmten Schema entsprechen in einer Liste. Das könnte ich durchaus auch anders Lösen, aber so fände ich es den elegantesten Weg.theo hat geschrieben:Was möchtest du denn damit erreichen?
mfg
Michael
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Methoden eines Objekts ermitteln
Meines wissens wird in der Published Sektion nur Eigenschaften gespeichert die auch im OI angezeigt werden. schau mal in die unit: Types(meine ich war das). Da findest du einige Procedure / Funktionen.
Ich meine, dass geht nur mit Eigenschaften(Property), meinst du vielleicht das ? Methoden würden auch gehen, wenn sie als glaube ich Methoden-Zeiger genutzt werden.
Ich meine, dass geht nur mit Eigenschaften(Property), meinst du vielleicht das ? Methoden würden auch gehen, wenn sie als glaube ich Methoden-Zeiger genutzt werden.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Methoden eines Objekts ermitteln
Ohne mich damit auszukennen, denke ich mal mit:
- Im OI werden published Eigenschaften angezeigt.
- Auch Events sind Eigenschaften
- Lazarus kann automatisch zu einem Event einen Methodenrumpf erzeugen
- Man kann selbst geschriebene Methoden als Eventhandler aufrufen; diese müssen aber als published deklariert sein
- => Frage: Wie wird beim Streaming ein Eventhandler nur vom Namen her zugewiesen (siehe .lfm-Datei), wenn dieser nicht bekannt ist?
- => Lazarus muss die formale Parameterliste und den Rückgabetyp kennen
- => Funktionstypen sind per RTTI erreichbar (sowohl deklarierte Methoden als auch reine Typen als Eigenschaften-Typ)
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Methoden eines Objekts ermitteln
Es gibt da gewisse Möglichkeiten. Ich habe z.b. ein Weg gefunden um Klassen auf diese Art und weise zu erzeugen. Vielleicht klappt das auch bei Events. Mein Weg war folgender:=> Frage: Wie wird beim Streaming ein Eventhandler nur vom Namen her zugewiesen (siehe .lfm-Datei), wenn dieser nicht bekannt ist?
Jede Klasse wird einmal Installisiert. Wird eine Klasse gebraucht wird davon einfach eine Kopie erzeugt. Ich denke bei events könnte etwas ähnliches passieren. Schaut euch doch mal die Entsprechende Procedure an.
Ich denke, dass hat weniger mit Lazarus zu tun, als mit den Tollen Codetools. Diese kennen die Paramenterliste.=> Lazarus muss die formale Parameterliste und den Rückgabetyp kennen
Kann aber auch sein, dass ich die RTTI noch nicht vollständig kenne bzw. das es gewisse Lücken gibt.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Methoden eines Objekts ermitteln
In TObject:Socke hat geschrieben: [*]=> Frage: Wie wird beim Streaming ein Eventhandler nur vom Namen her zugewiesen
Code: Alles auswählen
class function MethodAddress(const name : shortstring) : pointer;
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Methoden eines Objekts ermitteln
Ich sehe schon, ist alles nicht so einfach. Dann werde ich doch eher Properties abfragen die Methodenzeiger sind. Ist für die Entwickler ein bisschen umständlicher, aber muss halt so gehen.
Danke euch
Michael
Danke euch
Michael
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de