Здравствуйте, Вот возникла проблема с тем, что код работает нормально в Win2k, а под Win98 выдает ексепшн 0D. При инициализации управление передается в диалог, функция первый раз отрабатывает, а потом ексепшн. Посмотрите пожалуйста что тут не так: dlgproc proc call deltaproc deltaproc: pop ebp sub ebp, offset deltaproc jmp stackprepare hDlg dd 0 uMsg dd 0 wParam dd 0 lParam dd 0 szTextOK db 32 dup (0) TextOKSize DD 0 szHeaderOK db "Read OK",0 hwndEditOK dd 0 stackprepare: push esi mov esi, ebp push ebp mov ebp, esp push dword ptr ds:[ebp+0Ch] pop dword ptr ds:[esi+hDlg] push dword ptr ds:[ebp+10h] pop dword ptr ds:[esi+uMsg] push dword ptr ds:[ebp+14h] pop dword ptr ds:[esi+wParam] push dword ptr ds:[ebp+18h] pop dword ptr ds:[esi+lParam] pop ebp pop esi procstart: .IF (dword ptr ds:[ebp+uMsg] == WM_COMMAND) mov eax, dword ptr ds:[ebp+wParam] and eax, 0000FFFFh .IF (eax == IDOK) ; если была нажата кнопка, то получить дескриптор эдитбокса push ID_EDIT1 mov eax, dword ptr ds:[ebp+hDlg] push eax call dword ptr ds:[ebp+_GetDlgItem] mov dword ptr ds:[ebp+hwndEditOK], eax ; получить текст из эдитбокса push 32 mov eax, ebp add eax, offset szTextOK push eax push dword ptr ds:[ebp+hwndEditOK] call dword ptr ds:[ebp+_GetWindowTextA] mov dword ptr ds:[ebp+TextOKSize], eax ; вывести MessageBox с текстом из эдитбокса push MB_ICONINFORMATION mov eax, ebp add eax, offset szHeaderOK push eax mov eax, ebp add eax, offset szTextOK push eax push 0 call dword ptr ds:[ebp+_MessageBoxA] ; завершить работу диалога push 0 push dword ptr ds:[ebp+hDlg] call dword ptr ds:[ebp+_EndDialog] jmp quit .ELSE jmp quit .ENDIF .ELSE jmp quit .ENDIF quit: xor eax,eax retn 10h dlgproc endp
Я думаю, что неплохо бы сохранить ebp в начале процедуры, а затем восстановить в конце. З.Ы. Можно поинтересоваться к чему такой космический код: call deltaproc deltaproc: pop ebp sub ebp, offset deltaproc <=== ebp=0 ???????? jmp stackprepare
Kvazimoda при том, что это адресно независимый обработчик сообщений диалога. Сохранение не помогает, помог переход на другой индексный регистр ESI