Запустить КОМПАС - Файл - Создать - Чертеж - Ок - Файл - Закрыть - чертеж закрывается, но остаются кнопки управления окном документа (в одной строке с меню) - нажать на "крестик" - КОМПАС зависает, ни одна кнопка и меню в интерфейсе не работают
Бактрейс с места падения. Backtrace: =>1 0x7bf8aa30 (0x0033f800) 2 0x7ea74f03 call_window_proc+0x63(hwnd=<register EDI not in topmost frame>, msg=28, wp=0, lp=0, result=0x33f874, arg=0x7bf8aa30) [/home/vitperov/Projects/wine/dlls/user32/winproc.c:461] in user32 (0x0033f840) 3 0x7ea788a5 CallWindowProcW+0x45(func=0x7bf8aa30, hwnd=0x2035a, msg=28, wParam=<register ESI not in topmost frame>, lParam=0) [/home/vitperov/Projects/wine/dlls/user32/winproc.c:2339] in user32 (0x0033f880) 4 0x7288ebc7 in mfc42u (+0xebc7) (0x0033f8f4) 5 0x7ea7482a WINPROC_wrapper+0x1a() in user32 (0x0033f924) 6 0x7ea74f03 call_window_proc+0x63(hwnd=<register EDI not in topmost frame>, msg=28, wp=0, lp=0, result=0x33fa08, arg=0x7288eaac) [/home/vitperov/Projects/wine/dlls/user32/winproc.c:461] in user32 (0x0033f964) 7 0x7ea79a56 WINPROC_call_window+0xe6(hwnd=<register EDI not in topmost frame>, msg=28, wParam=0, lParam=0, result=0x33fa08, unicode=1, mapping=1397020) [/home/vitperov/Projects/wine/dlls/user32/winproc.c:2215] in user32 (0x0033f9a4) 8 0x7ea42db4 call_window_proc+0x84(hwnd=<register ESI not in topmost frame>, msg=<register EDI not in topmost frame>, wparam=0, lparam=0, unicode=1, same_thread=1, mapping=1397020) [/home/vitperov/Projects/wine/dlls/user32/message.c:1640] in user32 (0x0033fa14) 9 0x7ea4694e send_message+0x1be(info=<register ESI not in topmost frame>, res_ptr=0x33faa0, unicode=<is not available>) [/home/vitperov/Projects/wine/dlls/user32/message.c:2465] in user32 (0x0033fa64) 10 0x7ea46d7a SendMessageW+0x4a(hwnd=0x2035a, msg=28, wparam=0, lparam=0) [/home/vitperov/Projects/wine/dlls/user32/message.c:2588] in user32 (0x0033faa4) 11 0x7ea27273 set_active_window+0x243(hwnd=(nil), prev=(nil), mouse=0, focus=1) [/home/vitperov/Projects/wine/dlls/user32/focus.c:144] in user32 (0x0033fb74) 12 0x7ea27888 set_foreground_window+0xf8(hwnd=<register ESI not in topmost frame>, mouse=0) [/home/vitperov/Projects/wine/dlls/user32/focus.c:210] in user32 (0x0033fc14) 13 0x7ea278e6 SetForegroundWindow+0x46(hwnd=<register ESI not in topmost frame>) [/home/vitperov/Projects/wine/dlls/user32/focus.c:312] in user32 (0x0033fc24) 14 0x7e1d2f48 X11DRV_FocusOut+0x158(hwnd=<register EDI not in topmost frame>, xev=0x33fcd4) [/home/vitperov/Projects/wine/dlls/winex11.drv/event.c:688] in winex11 (0x0033fc64) 15 0x7e1d384f process_events+0x30f(display=0x7c069970, filter=0x7e1d1520, arg=1279) [/home/vitperov/Projects/wine/dlls/winex11.drv/event.c:318] in winex11 (0x0033fda4) 16 0x7e1d3e9b X11DRV_MsgWaitForMultipleObjectsEx+0xfb(count=1, handles=0x33fe04, timeout=4294967295, mask=1279, flags=<register ESI not in topmost frame>) [/home/vitperov/Projects/wine/dlls/winex11.drv/event.c:413] in winex11 (0x0033fdc4) 17 0x7ea45a3a GetMessageW+0x7a(msg=0x43abac, hwnd=(nil), first=<register EDI not in topmost frame>, last=0) [/home/vitperov/Projects/wine/dlls/user32/message.c:2965] in user32 (0x0033fe14) 18 0x728812b5 in mfc42u (+0x12b5) (0x0043abac) 19 0x00000200 (0x00010034) 20 0x00000000 (0x00000000) Такое впечатление, что окно полностью не закрывается, и происходит обращение к уже освобождённой памяти
ещё багу можно воспроизвести не открывая элемента. Достаточно только 2 раза закрыть стартовое окно с выбором действия. Первое нажатие на крестик - окно закрывается, но крестик остаётся Второе нажатие - программа падает. Последние строчки перед падением: fixme:shdocvw:ClOleCommandTarget_Exec (0x49a5c14)->({000214d1-0000-0000-c000-000000000046} 84 0 (nil) 0x33fb34) trace:graphics:DrawEdge 0x3bec (0,0)-(1262,819) 0005 200f trace:graphics:DrawEdge 0xa104 (0,0)-(1254,792) 000a 200f trace:graphics:DrawEdge 0xa104 (0,0)-(1254,792) 000a 200f trace:graphics:DrawEdge 0x3bec (0,0)-(1288,981) 0005 200f trace:graphics:DrawEdge 0x3bec (0,0)-(1288,981) 0005 200f trace:graphics:DrawEdge 0x3bec (0,0)-(1288,981) 0005 200f err:ole:ITypeInfo_fnInvoke did not find member id -514, flags 0x2! err:ole:ITypeInfo_fnInvoke did not find member id -504, flags 0x2! fixme:shdocvw:OleInPlaceObject_InPlaceDeactivate (0x49a5b78) fixme:mshtml:HlinkTarget_SetBrowseContext (0x174dd8)->((nil)) fixme:shdocvw:OleObject_Close (0x49a5b78)->(1) Но бактрейс совсем другой: Backtrace: =>1 0x00990001 in kcbu (+0xd0001) (0x00000000)
При дальнейшем рассмотрении, OleObject_Close оказалась просто заглушкой, возвращающей E_NOTIMPL Если возвращать S_OK, ничего не меняется. Вызов в этом месте WebBrowser_OleObject_Destroy ничего не меняет Вызов OleObject_Release приводит к падению при первом же закрытии
OleObject_Close никогда никого не обижала ещё. Посмотри, пожалуйста, действительно ли с ней падение связано? Насколько я понимаю, непосредственно к уничтожению окна ole имеет весьма отдалённое отношение.
Выложил патч. Прболема в том, что главное окно Компаса не перерисовывается, поэтому меню не обновляется. На самом деле, после закрытия последнего максимизированного mdi окна эти кнопки должны пропадать. Ошибка проявляется и немного по другому. Если создать чертеж, а затем фрагмент - то эти системные кнопки пропадут, хотя они должны быть всегда для максимизированных mdi окон. Причина такого поведения в том, что Компас сам рисует системные кнопки в обход стандартному механизму mdi, и wine не может определить их наличие. Патч добавляет функцию MDI_RefreshFrame, которая перерисовывает главное окно Компаса в случае, если при необходимости действий с системным меню, это меню не было обнаружено wine'ом.
Принято. WINE@Etersoft eter27/eter19