Получение работы Аллена Бауэра TMulticastEvent <T>

Я возился с кодом Аллена Бауэра для универсального диспетчера многоадресных событий (см. Его посты об этом в блоге).Вот).

Он дает достаточно кода, чтобы я захотел его использовать, и, к сожалению, он не опубликовал полный исходный код. У меня была попытка заставить его работать, но мои навыки ассемблера отсутствуют.

Моя проблема заключается в методе InternalSetDispatcher. Наивный подход заключается в использовании того же ассемблера, что и для других методов InternalXXX:

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

Но это используется для процедур с одним параметром const, например так:

procedure Add(const AMethod: T); overload;

И SetDispatcher имеет два параметра, один из которых var:

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

Итак, я предполагаю, что стек будет поврежден. Я знаю, что делает код (очищает кадр стека от вызова InternalSetDispatcher, выдвигая скрытую ссылку на себя, и я предполагаю адрес возврата), но я просто не могу понять, что немного ассемблера, чтобы получить весь дело идет

РЕДАКТИРОВАТЬ: просто чтобы уточнить, что я ищу, это ассемблер, который я мог бы использовать, чтобы заставить работать метод InternalSetDispatcher, то есть ассемблер, чтобы очистить стек процедуры с двумя параметрами, один из которых var.

РЕДАКТИРОВАТЬ 2: Я немного исправил вопрос, спасибо Мейсон за его ответы до сих пор. Я должен упомянуть, что приведенный выше код не работает, и когда SetEventDispatcher возвращается, AV поднимается.

Ответы на вопрос(2)

Ваш ответ на вопрос