Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Methoden-parameterliste zur laufzeit? (https://www.delphipraxis.net/15462-methoden-parameterliste-zur-laufzeit.html)

maximov 29. Jan 2004 10:58


Methoden-parameterliste zur laufzeit?
 
Moin *g*

Ich implementiere in meinem runtime objectInspector grade event-fähigkeiten, was auch kein problem ist, da es ja TObject.MethodAddress() gibt! Allerdings bekomme ich keine infos über die Erforderlichen Parameter. Bei prozeduralen typen kann man diese infos ja über die RTTi abgreifen (PTypeData.ParamList).

Deshalb: Gibt es eine möglichkeit die Methoden-parameterliste dynamisch zu ermitteln? Sollte es nicht gehen sagt es bitte auch, denn dann denke ich mir ein workaround aus...danke schonmal!

mfg.
maximovsky

choose 29. Jan 2004 11:07

Re: Methoden-parameterliste zur laufzeit?
 
Hallo maximov,

ein
Delphi-Quellcode:
GetTypeData(Self.GetMethodAddress('Foo')))
geht ohne Debug-Informationen (dann auch nicht in dieser Form) leider nicht und ist auch einer der Gründe, warum bei diversen Skript-Engines die Signaturen zusammen mit der Adressen der in der Engine benutzbaren Methoden registriert werden müssen...
Ausnahme bilden hier Lösungen, die "von Haus aus" eine solche Reflektion mitbringen müssen, wie zB Klassen, die das IDispatch Interface implementieren.

An welchen Work-Around hast Du gedacht?

maximov 29. Jan 2004 11:33

Re: Methoden-parameterliste zur laufzeit?
 
Ein möglicher workaround wäre halt ein registrierung der methoden in assoziation mit dem prozeduralen-typ (of object) zu machen, der dann ja die parameterliste hält. Nur dann muss ich jede methode einzelnd registrieren und muss eine methoden-registry schreiben, die für jede klasse die einträge verwaltet (leider gibt es in D7 ja keine klassenfelder) :wall:

Oder habt ihr eine bessere idee?

maximov 29. Jan 2004 12:10

Re: Methoden-parameterliste zur laufzeit?
 
Zitat:

Zitat von choose
Hallo maximov,

ein
Delphi-Quellcode:
GetTypeData(Self.GetMethodAddress('Foo')))
geht ohne Debug-Informationen (dann auch nicht in dieser Form) leider nicht ...

DebugInfos wären ja nicht so schlimm, da ich sie nur in meinem editor brauche, aber ich hab das mal getestet und kam nur salat bei raus. self.methodAddress liefert ja auch kein PTypeInfo deshalb muss es vermutlich schief gehen.

Bist du dir sicher, dass das so gehen kann?

choose 30. Jan 2004 09:51

Re: Methoden-parameterliste zur laufzeit?
 
Hallo maximov
Zitat:

Zitat von maximov
Zitat:

Zitat von choose
Delphi-Quellcode:
GetTypeData(Self.GetMethodAddress('Foo')))
geht ohne Debug-Informationen (dann auch nicht in dieser Form) leider nicht ...

[..]ich hab das mal getestet und kam nur salat bei raus

ich meinte mit meiner Äußerung (insbesondere mit dem Zusatz in den Klammern)
Zitat:

Zitat von choose
ein ~ geht ohne Debug-Informationen (dann auch nicht in dieser Form) leider nicht

dass
  1. keine RTTI zur Signatur von Funktionen, Records, Methoden, etc. erzeugt werden und
  2. selbst beim Compilieren mit Debug-Infos, bei der eine Map-Datei beim Kompilieren die entsprechenden Verknüpfungen bereit hält, diese Informationen nicht transparent (für den Programmierer ohne Unterschied zum drumherum) auf die RTTI-Funktionen gemappt werden
Sieh Dir mal die diversen Exception-Tracer auf dem Markt an, die auf den Debug-Informationen basieren, vielleicht kannst Du damit etwas erreichen.

Wolltest Du eine Lösung mithilfe von Reflektionsklassen umsetzen (ähnlich der Lösung in Java), könntest Du beim Kompilieren die Struktur Deiner Klassen analysieren und eine Helper-Klasse generieren lassen, die sich dann bei Initialsierung der Unit bei einem Singelton registriert...

maximov 30. Jan 2004 16:11

Re: Methoden-parameterliste zur laufzeit?
 
Danke Choose!

Ich denke ich lass es lieber und registriere die methoden von hand :cry: ...bzw wenn keine registrierung vorliegt, lass ich das event ungeprüft zuweisen *eins.zwei.risiko*


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.

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