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