Бутылка в eterhack rt/11624 Открываем экран "Данные о преподавателях", а потом любой другой либо просто выходим из него. Получаем ошибки типа "access violation in adress 00000000....."
Клиент проверил на текущей версии (21.01.2011) - сначала пару раз "Invalid pointer operation", затем "Access violation at address 00890D17. Write of address 14467698" и уже потом "access violation in address 00000000" Предыдущие описания ошибок касались новогодней версии - в этой похоже что-то поправили....
Хм... Появляется графическое сообщение об ошибке. В консоли ничего не появляется. Отладка будет весьма затруднительной. Где-то был полурабочий патч от mibori@. Можно попробовать применить его для перехвата исключений. Ещё появляется сообщение "Internal exception c000001d. Посмотрел в исходниках wine, этот код соответствует: ERROR_INVALID_FUNCTION, /* c000001d (STATUS_ILLEGAL_INSTRUCTION) */
На решения баги потребуется много времени, и на данный момент заниматься этой багой не планирую. Чтобы бага не "застряла" перевешиваю на Сашу
Первое исключение при закрытии экрана "Данные о преподавателях" возникает по адресу 0x8a9c94. Код в данном участке памяти судя по выводу info share в winedbg не относится к какой-то dll, а каким-то образом записан туда программой. Возможно, там вообще не код, и управление туда передаётся по ошибке.
Сообщения об ошибках не появляются, если в WINPROC_CallProcWtoA не вызывать обработчик для WM_SIZE при lParam = 0x1a30310 и wParam = SIZE_RESTORED. Но это работает только для одного размера окна.
Сообщения, игнорирование которых приводит к отсутствию ошибок, посылаются при открытии экрана. А ошибки возникают при закрытии.
> Сообщения, игнорирование которых приводит к отсутствию ошибок, посылаются при > открытии экрана. А ошибки возникают при закрытии. Нет, это не так. Окну "Данные о преподавателях" сообщение посылается и при закрытии.
Проблему можно обойти, если в USER_SetWindowPos возвращать FALSE при определённых значении WINDOWPOS. При этом не будет вызываться падающий обработчик. USER_SetWindowPos вызывается из SetWindowPos (break_8074 - специальная функция, чтобы поставить точку останова на нужную ситуацию): =>0 0x7e6db947 break_8074() [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/winpos.c:2047] in user32 (0x0033f0bc) 1 0x7e6dc167 SetWindowPos+0x139(hwnd=0x33f0fc, hwndInsertAfter=0x2c, x=0, y=0x95c70000, cx=0xffffffff, cy=0x110014, flags=0x33f0fc) [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/winpos.c:2232] in user32 (0x0033f12c) 2 0x7e6dc167 SetWindowPos+0x139(hwnd=0x20142, hwndInsertAfter=(nil), x=0x16, y=0x16, cx=0x318, cy=0x1be, flags=0x8074) [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/winpos.c:2232] in user32 (0x0033f1bc) 3 0x7e6d8c42 show_window+0x3d5(hwnd=0x20142, cmd=0x4) [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/winpos.c:1094] in user32 (0x0033f1ec) 4 0x7e6d8f60 ShowWindow+0x5d(hwnd=0x20142, cmd=0x4) [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/winpos.c:1194] in user32 (0x0033f22c) 5 0x7e6845ea MDI_SwitchActiveChild+0x13c(ci=0x176684, hwndTo=(nil), activate=0) [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/mdi.c:549] in user32 (0x0033f27c) 6 0x7e684abc MDI_ChildActivate+0x119(client=0x100a2, child=(nil)) [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/mdi.c:648] in user32 (0x0033f2dc) 7 0x7e6847c4 MDIDestroyChild+0x154(client=0x100a2, ci=0x176684, child=0x20142, flagDestroy=0x1) [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/mdi.c:587] in user32 (0x0033f3cc) 8 0x7e6864b7 MDIClientWndProc_common+0x60e(hwnd=0x100a2, message=0x221, wParam=0x20142, lParam=0, unicode=0) [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/mdi.c:1170] in user32 (0x0033f3fc) 9 0x7e6e1913 MDIClientWndProcA+0x3c(hwnd=0x100a2, msg=0x221, wParam=0x20142, lParam=0) [/srv/amorozov/Projects/wine-etersoft-public/dlls/user32/winproc.c:1162] in user32 (0x0033f42c) 10 0x7e6de62a WINPROC_wrapper+0x19() in user32 (0x0033f53c) ....... тут ещё много всего ....... Возможно, в WINE что-то не так с посылкой сообщений при использовании MDI. Сделал хак. Отправил его в wine-patches-test.
Принято. WINE@Etersoft School 1.7.0 eter5/6