Einzelnen Beitrag anzeigen

Rollo62
Online

Registriert seit: 15. Mär 2007
3.917 Beiträge
 
Delphi 12 Athens
 
#1

Anonymous method: TProc Referenzen vergleichen

  Alt 6. Sep 2018, 09:06
Delphi-Version: 5
Hallo zusammen,

ich möchte eine Funktion wie hier mehrfach aufrufen

Delphi-Quellcode:
procedure CalledByButtonClick;
begin
    // Beim Eintritt soll gecheckt werden ob die Funktion noch läuft
    // wenn ja, wird die alte Funktion gekillt und ersetzt
    TAnonCaller.ExecuteWithKillAndDelay(procedure
                                        begin
                                            // Kommt hier nach Verzögerung an
                                        end);
end;
Dazu müsste ich an einer Stelle zwei Referenzen zu anonymen Methoden vergleichen,
ungefähr so:

Delphi-Quellcode:

// A1 ist die Referenz auf die intern gespeicherte anonyme prozedur, s.o,
// A2 ist die Referenz auf (dieselbe) anonyme prozedur, nur eben wir diese jetzt zum 2. Mal aufgerufen
function Compare(A1 : TProc; A2 TProc) : Boolean;
begin
    Result := A1 = A2;
end;
Ich habe schon einiges Interessantes dazu gefunden
https://forums.embarcadero.com/threa...hreadID=167554
https://stackoverflow.com/questions/...under-the-hood
https://sergworks.wordpress.com/2010...the-internals/
https://forums.embarcadero.com/threa...hreadID=167554
https://theroadtodelphi.com/2010/10/...pe-definition/

Aber so richtig weiter komme ich im Moment damit nicht.
Der bisher vielversprechendste Ansatz war der:
Delphi-Quellcode:
procedure Test(P1 : TProc; P2 : TProc);
type
  PIInterface = ^IInterface;
var
  UnitName : String;
  Ctx: TRttiContext;
  ProcType: TRttiType;
  obj1: TInterfacedObject;

begin
  obj1 := PIInterface(@P1)^ as TInterfacedObject;

  UnitName := obj.UnitName;
  Ctx := TRttiContext.Create;
  ProcType := Ctx.GetType(obj1.ClassType);
So kann ich die Typen von P1 analysieren, aber eben nicht herausfinden ob P1 = P2 ist.

Vielleicht könnte mich freundlicherweise jemand in die richtige Richtung schubsen,
denn wahrscheinlich sehe gerade ich den Wald vor lauter Bäumen nicht mehr


Rollo
  Mit Zitat antworten Zitat