AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Pointer auf Methode (einer Klasse) mit unbekannter Signatur
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer auf Methode (einer Klasse) mit unbekannter Signatur

Ein Thema von s.h.a.r.k · begonnen am 31. Dez 2009 · letzter Beitrag vom 2. Jan 2010
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Pointer auf Methode (einer Klasse) mit unbekannter Signatur

  Alt 31. Dez 2009, 16:54
Edit:
Bitte weiter unten die aktualiserte Frage lesen

Hallo zusammen,

und zwar bastle ich gerade an daran, den EventListener-Mechanismus, welcher z.B. aus Java oder Flash bekannt ist, nachzubauen. Mir schwebt der folgende Code vor:
Delphi-Quellcode:
{ Definierte Events }
type TEventType = (evtClick, evtError);

{ Methoden, die später durch die Events aufgerufen werden }
procedure OnClickA(Sender: TObject); begin { ... } end;
procedure OnClickB(Sender: TObject); begin { ... } end;
procedure OnErrorA(const AError: String); begin { ... } end;
procedure OnErrorB(const AError: String); begin { ... } end;

{ Events verknüpfen }
blub.AddEventLister(evtClick, OnClickA);
blub.AddEventLister(evtClick, OnClickB);
blub.AddEventLister(evtClick, OnErrorA);
blub.AddEventLister(evtClick, OnErrorB);

{ AddEventListener-Methode soll einen Pointer auf die entsprechende
  aufzurufende Methode in eine passende Liste übernehmen }

procedure TBlub.AddEventListener(const AType: TEventType; AListener: TMethod);
begin
  // In passender Liste Referenz auf Methode einfügen
  FMethodPointerList[AType].Add(@AListener);

  { Hier noch die Definition von FMethodPointerList:
    FMethodPointerList : array[ low(TEventType) .. high(TEventType) ] of TList; }

end;
Nun habe ich das Problem, dass der Compiler mir einen Fehler bringt, wenn ich eine Methode als Listener anmelden will, alsi bei der Ausführung des folgenden Codes:
blub.AddEventLister(evtClick, OnClickA); Mir ist klar, dass ich eigentlich den Fehler posten sollte, aber mir geht es primär eher um etwas anderes: ich will ja nur einen Zeiger auf die Methode übergeben, dabei interessiert mich nicht wie viele Parameter die Methode hat. Dies wird später entsprechend ausgewertet, von Methoden die die Definition kennen. Habt ihr eine Ahnung, ob das überhaupt möglich ist? Wenn ja, wie kann ich denn sowas anstellen?

Hier nochmals das Problem in Kurzform, was ich haben will:
Delphi-Quellcode:
procedure A(AVar: String); begin { ... } end;
procedure B(const ATemp: Integer): begin { ... } end;
procedure C(AMuh: TKuh); begin { ... } end;

procedure SaveMethodePointer(AMethodPointer: TMethodPointer); // TMethodPointer -> Welchen Typ sollte ich hier nutzen?
begin
  FPointerList.Add(AMethodPointer);
end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Pointer auf Methode mit bel. Param. als Param. übergeben

  Alt 31. Dez 2009, 20:39
Wird bei Java nicht gleich ein komplettes Interface anstatt einer einzelnen Methode übergeben?
Diese Art von Interfaces sind in Delphi aber (aus gewissen Gründen) nicht so beliebt.

Was du suchst sind Eventmulticaster. Schau dir dazu mal in der VCL TApplicationEvents an!
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: Pointer auf Methode (einer Klasse) mit unbekannter Signa

  Alt 1. Jan 2010, 19:44
Jup, ich suche eine Möglichkeit für Multicast-Events. Ich habe auch den Titel meines Threads umbenannt, da ich mir nochmals Gedanken über meine Fragestellung gemacht habe. Ich sollte es wie folgt definieren:

Wie kann ich einen Pointer auf eine Methode einer Klasse bekommt, deren Signatur ich nicht kenne? Im späteren Verlauf der Anwendung ist diese Sigantur bekannt und wird korrekt aufgerufen. An sich müsste sowas doch Mmlich sein, da der Pointer auf solch eine Methode doch unabhängig von der Signatur ist, oder?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Pointer auf Methode (einer Klasse) mit unbekannter Signa

  Alt 2. Jan 2010, 15:34
Ja das ist möglich. Redest du jetzt eigentlich von Funktionen oder von Methoden?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: Pointer auf Methode (einer Klasse) mit unbekannter Signa

  Alt 2. Jan 2010, 15:40
Einer Methode einer Klasse.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

Re: Pointer auf Methode (einer Klasse) mit unbekannter Signa

  Alt 2. Jan 2010, 15:41
Geht es hier eigentlich um das Selbe?
http://www.delphipraxis.net/internal...t.php?t=171086

Zitat von sirius:
Ja das ist möglich. Redest du jetzt eigentlich von Funktionen oder von Methoden?
@sirius: Da drüben sind es Methoden und Prozeduren/Funktionen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

Re: Pointer auf Methode (einer Klasse) mit unbekannter Signa

  Alt 2. Jan 2010, 16:21
Jo, das hat mit der selben Sache zu tun Eigentlich könnte man das ganze mergen, aber es sind teilweise doch andere Fragen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 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