Praca nad TMulticastEvent <T> Allena Bauera działa

Wymyśliłem się z kodem Allena Bauera dla ogólnego dyspozytora zdarzeń multiemisji (zobacz jego posty na blogu o tymtutaj).

Podaje tylko tyle kodu, że chcę go użyć i niestety nie opublikował pełnego źródła. Miałem bash w przygotowaniu go do pracy, ale moje umiejętności asemblera nie istnieją.

Moim problemem jest metoda InternalSetDispatcher. Naiwnym podejściem jest użycie tego samego asemblera, co w przypadku innych metod InternalXXX:

procedure InternalSetDispatcher;
begin
   XCHG  EAX,[ESP]
   POP   EAX
   POP   EBP
   JMP   SetEventDispatcher
end;

Ale jest to używane dla procedur z jednym parametrem const, takim jak ten:

procedure Add(const AMethod: T); overload;

A SetDispatcher ma dwa parametry, jeden a var:

procedure SetEventDispatcher(var ADispatcher: T; ATypeData: PTypeData);

Zakładam więc, że stos zostanie uszkodzony. Wiem, co robi ten kod (czyszczenie ramki stosu z wywołania do InternalSetDispatcher przez wyświetlenie ukrytego odniesienia do siebie i zakładam adres zwrotny), ale po prostu nie mogę zrozumieć tego małego kawałka asemblera, aby uzyskać całość rzecz idzie.

EDYCJA: Aby wyjaśnić, szukam asemblera, którego mogę użyć, aby uzyskać metodę InternalSetDispatcher, tj. Asemblera do czyszczenia stosu procedury z dwoma parametrami, jeden a var.

EDIT2: Poprawiłem trochę pytanie, dziękuję Masonowi za dotychczasowe odpowiedzi. Powinienem wspomnieć, że powyższy kod nie działa, a kiedy SetEventDispatcher wraca, generowany jest AV.

questionAnswers(2)

yourAnswerToTheQuestion