Einzelnen Beitrag anzeigen

RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#1

Datentyp für anonyme Methoden wie TMethod für Methoden

  Alt 8. Aug 2012, 11:41
Hallo,

ich verwende für Multicast-Events momentan ein array of TMethod. Damit kann ich die ganze Verwaltung (Register, Unregister, Verhinderung von Doppelregistrierungen etc.) mit den selben Codeteilen durchführen. Lediglich der Aufruf muss natürlich für jeden Event speziell geschrieben werden, da ja immer andere Parameter auftauchen.

Problem: Bei diesem Vorgehen kann ich nur Methoden als Event-Handler verwenden, keine Funktionen, Prozeduren und vor allem keine anonymen Methoden. Ich möchte gerne ein array of "Referenz" nutzen, damit ich auch anonyme Methoden benutzen kann. Ich suche also einen Referenz-Ersatz für TMethod.

Nun habe ich etwas geforscht und gefunden, dass hinter einer "Referenz" letztlich ein Interface und ein ganzes Objekt mit einer entsprechenden Invoke-Methode steht. Das ganze ist mit Referenzzählung ausgestattet. Diese Referenzzählung soll natürlich unterstützt werden, ich möchte nicht daneben noch referenzgezählte Variablen halten müssen, damit ich beim Aufruf nicht ins leere greife (das dahinterliegende Objekt bereits freigegeben ist). IInterface ist der Vorfahr aller referenzgezählten Interfaces, aber natürlich in keiner Weise zuweisungskompatibel mit einer Referenzvariable.

Wer hat eine Idee, wie mein Vorhaben umsetzbar ist? Ich möchte allerdings keinen Hack! Also ich werde mir nicht die Code-Einsprungadresse holen mit dem Wissen, dass diese momentan an der vierten Stelle des Objektes gespeichert ist (nach _AddRef usw.).

MfG
RSE

p.s. Bitte nicht mit den unterschiedlichen Bedeutungen von "Referenz" in Referenzvariable ("Zeiger" auf eine anonyme Methode) und Referenzzählung (Anzahl der Zeiger auf ein Objekt) durcheinanderkommen! Wer dafür bessere Bezeichnungen weiß, bitte gern her damit!
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat