· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Куда девается ESI?

Посл.отвђт Сообщенiе


Дата: Апр 9, 2004 14:23:44

В ESI хранится хэндл окна, но в WindowProc он становится неверным.ЧТО ДЕЛАТЬ?[


Дата: Апр 9, 2004 14:29:28

В каком смысле "но в WindowProc он становится неверным" ??
покажи кусок кода.


Дата: Апр 9, 2004 14:30:41 · Поправил: s0rg

Ты хочешь сказать наверное, что hWnd после CreateWindow
не равен тому что приходит как hWnd в оконный процедуре?
Если да - то это действительно два разных значения и
хранить первый hWnd (после Create) надо в памяти а не в
регистре.
Если нет - следи за push/pop еще значения esi изменяют разные stos/movs/scas/...


Дата: Апр 9, 2004 15:13:24

s0rg
stos/scas не изменяют esi.. :)


Дата: Апр 9, 2004 15:19:55

в WindowProc он становится неверным

WindowProc - это CallBack функция.
Она вызывается виндосом, в процессе работы DispathMessage.
Значение ESI там неопределено, его меняет сам виндос приобработке DispathMessage
Еще рекомендуется сохранять EBP, EBX, ESI, EDI, если они используются внутри WindowProc.
(хотя это не обязательно для всех версий виндоса)


ЧТО ДЕЛАТЬ?

Использовать параметр, который передает виндос в ф-цию
proc WindowProc hwnd,uMsg,wParam,lParam


Дата: Апр 9, 2004 18:45:36 · Поправил: prog

OverMind
Если какието данные тебе нужны в разных функциях, то их правильнее будет записывать в переменные, т.к. хранить чтото нужное Везде в регистре (esi,edi,ebx)- тяжко и замучаешься везде сохранять-восстанавливать его.
Тем более, что esi,edi будешь использовать почти везде.
Сохраняй EBX, ESI, EDI, если хочешь чтобы чтото работало в Win2k. Литературно про их сохранение читай тут:
http://www.wasm.ru/article.php?article=biprjasm
только там очепятка- это не сегментные регистры.


Дата: Апр 9, 2004 20:06:43

[ prog - Сохраняй EBX, ESI, EDI, если хочешь чтобы чтото работало в Win2k. ]

Странно, у меня в 2K (w/o SP) все работает если их портить в WindowProc. DialogProc в 2К - там нельзя. XP - по барабану.
В Win98SE нужно сохраниять EBP & EDI в WindowProc. Более старые виндосы не смотрел.. Но лучше всеже сохранять :/


Если какието данные тебе нужны в разных функциях, то их правильнее будет записывать в переменные

Это верно, но в случае с WindowProc логично использовать, тот хендл, который приходит в hwnd.
Тогда можно обрабатывать сообщения от разных окон.


Дата: Апр 9, 2004 21:51:56

S_T_A_S_
Это верно, но в случае с WindowProc логично использовать, тот хендл, который приходит в hwnd.
Естественно.
Я имел ввиду вообще, в принципе. :)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.053