Obtendo o TMulticastEvent <T> de Allen Bauer

Eu tenho andado por aí com o código de Allen Bauer para um despachante de eventos multicast genérico (veja os posts do blog dele sobre issoAqui).

Ele dá apenas código suficiente para me fazer querer usá-lo, e infelizmente ele não postou a fonte completa. Eu tive uma festa para fazer funcionar, mas minhas habilidades de montadora são inexistentes.

Meu problema é o método InternalSetDispatcher. A abordagem ingênua é usar o mesmo assembler que os outros métodos InternalXXX:

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

Mas isso é usado para procedimentos com um parâmetro const, como este:

procedure Add(const AMethod: T); overload;

E SetDispatcher tem dois parâmetros, um var:

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

Então, eu suponho que a pilha seria corrompida. Eu sei o que o código está fazendo (limpando o quadro de pilha da chamada para InternalSetDispatcher, colocando a referência oculta para si e assumindo o endereço de retorno), mas eu simplesmente não consigo descobrir que pouco montador para obter o todo coisa acontecendo.

EDIT: Só para esclarecer, o que estou procurando é o montador que eu poderia usar para obter o método InternalSetDispatcher para trabalhar, ou seja, o montador para limpar a pilha de um procedimento com dois parâmetros, um var.

EDIT2: Eu alterei a questão um pouco, obrigado a Mason por suas respostas até agora. Eu devo mencionar que o código acima não funciona, e quando SetEventDispatcher retorna, um AV é gerado.

questionAnswers(2)

yourAnswerToTheQuestion