Вопрос № 167086: Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, надо ли функции обратного вызова (CALLBACK) освобождать стек от передаваемых ей функций? По идее надо, но вот что я встретил в коде, написанным Пироговым и выложенном у него на сайте:<br...
Вопрос № 167.086
Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, надо ли функции обратного вызова (CALLBACK) освобождать стек от передаваемых ей функций? По идее надо, но вот что я встретил в коде, написанным Пироговым и выложенном у него на сайте:
;процедура фильтра HOOK PROC EXPORT
PUSH EBP MOV EBP,ESP ;отправить сообщение по цепочке PUSH DWORD PTR [EBP+010H] PUSH DWORD PTR [EBP+0CH] PUSH DWORD PTR [EBP+08H] PUSH HHOOK
CALL CallNextHookEx@16 ;проверить, не нажат ли пробел CMP DWORD PTR [EBP+0CH],32 JNE _EX ;нажат - выводим сообщение PUSH 0 ;MB_OK PUSH OFFSET CAP PUSH OFFSET MES PUSH 0 ;в окне экрана CALL MessageBoxA@16 _EX: POP EBP RET HOOK ENDP
Хотя по прототипу в msdn передается 3 параметра dword:
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Антон Колоколов! На мой взгляд, правильно RET 12. Параметры надо убирать. RET 0 может и работает, только до поры, до времени, пока, например, не переполнится стек или не произойдут какие-нибудь накладки со стеком... Кстати говоря, это источник будущих "непонятных" вылетов.
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Профессионал) Украина, Кировоград ICQ: 234137952 ---- Ответ отправлен: 12.05.2009, 17:52
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 249028 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.