Хорошо известно, что ATL подключает окно к своей wndproc с помощью thunking, который фактически заменяет hwnd этим указателем на месте и переходит к wndproc, так что вызов wndproc(hwnd, ...) на самом деле является wndproc(this, .. .) .
Ниже приведен ассемблерный код, который создает преобразователь:
mov dword ptr [esp+0x4], pThis (esp+0x4 is hWnd)
У меня вопрос: поскольку этот преобразователь выполняется один раз, как мы можем быть уверены, что [esp+0x4] не будет перезаписан ЦП для вызова другой процедуры, и в следующий раз wndproc(...) вызвано, hwnd передан снова? Насколько я понимаю, [esp+0x4] — это многоразовый регистр общего назначения для хранения первого параметра любой процедуры.
Что здесь не так? как модификация hwnd гарантированно будет бессрочной?
Спасибо.