Summary: | Печать из программы Налогоплательщик ЮЛ | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Семенов Александр Алексеевич <saa> |
Component: | Печать ; Диалог печати | Assignee: | Виталий Перов <vitperov> |
Status: | CLOSED FIXED | QA Contact: | Денис Баранов <baraka> |
Severity: | critical | ||
Priority: | P2 | CC: | baraka, kondratyuk, lav |
Version: | 1.0.10 | Keywords: | TO_WINEHQ |
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | 10141,10147 | Связано с: | |
Дата напоминания: | |||
Bug Depends on: | 3084, 3301 | ||
Bug Blocks: | 443, 3962, 6009 |
Description
Семенов Александр Алексеевич
2008-12-19 17:14:40 MSK
Версия 4.13 Итересно то, что в текущей версии ветки eterhack это программа вообще не работает: появляются бесконечные сообщения о невозможности записи в файлы, и о несуществовании переменных. В "чистом" wine и в wine из репозитория eterwine программа работает. Пробовал печатать на тестовый (виртуальный) принтер. Печать 5 страниц проходит без проблем. Версия 4.14 Не работает даже в "чистом" wine. Думаю это уже отдельная бага Завёл отдельную багу (#3301) После нажатие на "Печать" появляется сообщение "При печати произошла неизвестная ошибка" Трейс по каналам wineps,psdrv,commdlg даёт только: trace:commdlg:PrintDlgA (0x245ead0): hwndOwner = 0x20040, hDevMode = (nil), hDevNames = (nil) pp. 0-0, min p 0, max p 0, copies 0, hinst (nil) flags 0014010c (PD_NOSELECTION PD_NOPAGENUMS PD_RETURNDC PD_USEDEVMODECOPIES[ANDCOLLATE] PD_HIDEPRINTTOFILE ) trace:commdlg:PRINTDLG_WMCommandA OK button was hit Проверил. Комманда PSDRV_StartDoc не вызывается. Предположительно бага в диалоге печати Отладчик паказывает падение: 0x7e5f2a36 PRINTDLG_WMCommandA+0x916 in comdlg32: movzwl 0x4(%esi),%eax Wine-dbg>First chance exception: page fault on read access to 0x00000004 in 32-bit code (0x7e5f2a36). Backtrace: =>0 0x7e5f2a36 PRINTDLG_WMCommandA+0x916() in comdlg32 (0x003289f4) 1 0x7e5f380f in comdlg32 (+0x2380f) (0x00328b44) 2 0x7ed3cbea WINPROC_wrapper+0x1a() in user32 (0x00328b74) 3 0x7ed3deae in user32 (+0xadeae) (0x00328bd4) 4 0x7ed40d32 in user32 (+0xb0d32) (0x00328c24) 5 0x7ecc52f3 DefDlgProcA+0x83() in user32 (0x00328c74) 6 0x7ed3cbea WINPROC_wrapper+0x1a() in user32 (0x00328ca4) 7 0x7ed3e15d in user32 (+0xae15d) (0x00328cf4) 8 0x7ed40e73 CallWindowProcA+0xa3() in user32 (0x00328d64) 9 0x1002e7e0 in seon (+0x2e7e0) (0x00328d84) 10 0x1002deae in seon (+0x2deae) (0x00328db0) 11 0x100307be in seon (+0x307be) (0x00328de0) 12 0x1003139b in seon (+0x3139b) (0x00328e04) 13 0x1002f29d in seon (+0x2f29d) (0x00328e54) 14 0x1002ecdc in seon (+0x2ecdc) (0x00328ed0) 15 0x1002ec8e in seon (+0x2ec8e) (0x00328ef0) 16 0x1002ddf1 in seon (+0x2ddf1) (0x00328f50) 17 0x1002dff9 in seon (+0x2dff9) (0x00328f6c) 18 0x7ed3cbea WINPROC_wrapper+0x1a() in user32 (0x00328f9c) 19 0x7ed3e15d in user32 (+0xae15d) (0x00328fec) 20 0x7ed3cfca WINPROC_wrapper+0x3fa() in user32 (0x003294bc) 21 0x7ed412b3 in user32 (+0xb12b3) (0x0032950c) 22 0x7ecffe51 in user32 (+0x6fe51) (0x0032956c) 23 0x7ed05076 in user32 (+0x75076) (0x003295ec) 24 0x7ed0551c SendMessageW+0x4c() in user32 (0x0032963c) 25 0x7ecaaa56 in user32 (+0x1aa56) (0x0032971c) 26 0x7ecab5ac in user32 (+0x1b5ac) (0x0032973c) 27 0x7ed3cbea WINPROC_wrapper+0x1a() in user32 (0x0032976c) 28 0x7ed3e15d in user32 (+0xae15d) (0x003297bc) 29 0x7ed4121b in user32 (+0xb121b) (0x0032980c) 30 0x7ecfff76 DispatchMessageW+0x96() in user32 (0x0032985c) 31 0x7ecc9e89 IsDialogMessageW+0x119() in user32 (0x003299fc) 32 0x7ecca7f4 in user32 (+0x3a7f4) (0x00329a6c) 33 0x7ecccb72 DialogBoxIndirectParamAorW+0x52() in user32 (0x00329a9c) 34 0x7ecccc11 DialogBoxIndirectParamA+0x41() in user32 (0x00329acc) 35 0x7e5f7160 PrintDlgA+0x310() in comdlg32 (0x00329f4c) 36 0x1002bc40 in seon (+0x2bc40) (0x022755a8) 37 0x00000006 (0x1003f584) 38 0x100106e0 in seon (+0x106e0) (0x10010400) 39 0x9090c310 (0x03e858b8) 40 0x00000000 (0x00000000) то же самое, но с отладкой: Backtrace: =>0 0x7e60c471 PRINTDLG_WMCommandA+0x90d(hDlg=0x10094, wParam=1, lParam=262290, PrintStructures=0x192f38) [/srv/vitperov/Projects/wine-dev/dlls/comdlg32/printdlg.c:435] in comdlg32 (0x00328bd4) 1 0x7e60cd3c PrintDlgProcA+0x9c(hDlg=0x10094, uMsg=273, wParam=1, lParam=262290) [/srv/vitperov/Projects/wine-dev/dlls/comdlg32/printdlg.c:1873] in comdlg32 (0x00328cf4) fixme:dbghelp_dwarf:dwarf2_parse_variable Unsupported form for const value System (a) 2 0x7ed3d59a WINPROC_wrapper+0x1a() in user32 (0x00328d24) 3 0x7ed3d81d call_dialog_proc+0x65(hwnd=<register EDI not in topmost frame>, msg=273, wp=1, lp=262290, result=0x328da4, arg=0x7e60cca0) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:482] in user32 (0x00328d64) 4 0x7ed4245f WINPROC_CallDlgProcA+0x54(func=0xffff0039, hwnd=<register EDI not in topmost frame>, msg=273, wParam=1, lParam=262290) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:2402] in user32 (0x00328db4) 5 0x7ecca4f2 DefDlgProcA+0x7d(hwnd=<register ESI not in topmost frame>, msg=<register EDI not in topmost frame>, wParam=1, lParam=262290) [/srv/vitperov/Projects/wine-dev/dlls/user32/defdlg.c:443] in user32 (0x00328de4) 6 0x7ed3d59a WINPROC_wrapper+0x1a() in user32 (0x00328e14) 7 0x7ed3d97f call_window_proc+0x61(hwnd=<register EDI not in topmost frame>, msg=<register ESI not in topmost frame>, wp=1, lp=262290, result=0x328ea0, arg=0x7ecca475) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:461] in user32 (0x00328e54) 8 0x7ed426a0 CallWindowProcA+0x118(func=<is not available>, hwnd=0x10094, msg=273, wParam=1, lParam=262290) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:2324] in user32 (0x00328ec4) 9 0x1002e7e0 in seon (+0x2e7e0) (0x00328ee4) 10 0x1002deae in seon (+0x2deae) (0x00328f10) 11 0x100307be in seon (+0x307be) (0x00328f40) 12 0x1003139b in seon (+0x3139b) (0x00328f64) 13 0x1002f29d in seon (+0x2f29d) (0x00328fb4) 14 0x1002ecdc in seon (+0x2ecdc) (0x00329030) 15 0x1002ec8e in seon (+0x2ec8e) (0x00329050) 16 0x1002ddf1 in seon (+0x2ddf1) (0x003290b0) 17 0x1002dff9 in seon (+0x2dff9) (0x003290cc) 18 0x7ed3d59a WINPROC_wrapper+0x1a() in user32 (0x003290fc) 19 0x7ed3d97f call_window_proc+0x61(hwnd=<register EDI not in topmost frame>, msg=<register ESI not in topmost frame>, wp=1, lp=262290, result=0x3296b0, arg=0x1002dfce) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:461] in user32 (0x0032913c) 20 0x7ed405f6 WINPROC_CallProcWtoA+0x196(callback=0x7ed3d91e, hwnd=0x10094, msg=273, wParam=1, lParam=262290, result=0x3296b0, arg=0x1002dfce) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:1276] in user32 (0x0032961c) 21 0x7ed42a64 WINPROC_call_window+0x183(hwnd=<register EDI not in topmost frame>, msg=273, wParam=1, lParam=262290, result=0x3296b0, unicode=1, mapping=WMCHAR_MAP_SENDMESSAGE) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:2213] in user32 (0x0032965c) 22 0x7ed0332a call_window_proc+0x8e(hwnd=<register ESI not in topmost frame>, msg=<register EDI not in topmost frame>, wparam=1, lparam=262290, unicode=1, same_thread=1, mapping=WMCHAR_MAP_SENDMESSAGE) [/srv/vitperov/Projects/wine-dev/dlls/user32/message.c:1642] in user32 (0x003296bc) 23 0x7ed08917 send_message+0x1bd(info=<register EDI not in topmost frame>, res_ptr=0x329758, unicode=1) [/srv/vitperov/Projects/wine-dev/dlls/user32/message.c:2502] in user32 (0x0032971c) 24 0x7ed08dd6 SendMessageW+0x4c(hwnd=0x10094, msg=273, wparam=1, lparam=262290) [/srv/vitperov/Projects/wine-dev/dlls/user32/message.c:2625] in user32 (0x0032975c) 25 0x7ecb06d4 ButtonWndProc_common+0x72f(hWnd=0x40092, uMsg=<is not available>, wParam=0, lParam=524307, unicode=1) [/srv/vitperov/Projects/wine-dev/dlls/user32/button.c:435] in user32 (0x0032982c) 26 0x7ecb1415 ButtonWndProcW+0x46(hWnd=<register ESI not in topmost frame>, uMsg=514, wParam=0, lParam=524307) [/srv/vitperov/Projects/wine-dev/dlls/user32/button.c:555] in user32 (0x0032984c) 27 0x7ed3d59a WINPROC_wrapper+0x1a() in user32 (0x0032987c) 28 0x7ed3d97f call_window_proc+0x61(hwnd=<register EDI not in topmost frame>, msg=<register ESI not in topmost frame>, wp=0, lp=524307, result=0x32992c, arg=0x7ecb13cf) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:461] in user32 (0x003298bc) 29 0x7ed429ce WINPROC_call_window+0xed(hwnd=<register EDI not in topmost frame>, msg=514, wParam=0, lParam=524307, result=0x32992c, unicode=1, mapping=WMCHAR_MAP_DISPATCHMESSAGE) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:2226] in user32 (0x003298fc) 30 0x7ed0344a DispatchMessageW+0x96(msg=<register EDI not in topmost frame>) [/srv/vitperov/Projects/wine-dev/dlls/user32/message.c:3145] in user32 (0x0032993c) 31 0x7ecd1223 IsDialogMessageW+0x116(hwndDlg=<register ESI not in topmost frame>, msg=0x329af4) [/srv/vitperov/Projects/wine-dev/dlls/user32/dialog.c:1256] in user32 (0x00329abc) 32 0x7ecd1b01 DIALOG_DoDialogBox+0x119(hwnd=<register EDI not in topmost frame>, owner=0x20048) [/srv/vitperov/Projects/wine-dev/dlls/user32/dialog.c:813] in user32 (0x00329b1c) 33 0x7ecd1c0c DialogBoxIndirectParamAorW+0x52(hInstance=0xc000000, template=0x7e640038, owner=<register ESI not in topmost frame>, dlgProc=0x7e60cca0, param=1650488, flags=2) [/srv/vitperov/Projects/wine-dev/dlls/user32/dialog.c:874] in user32 (0x00329b3c) 34 0x7ecd1ca0 DialogBoxIndirectParamA+0x41(hInstance=0xc000000, template=0x7e640038, owner=0x20048, dlgProc=0x7e60cca0, param=1650488) [/srv/vitperov/Projects/wine-dev/dlls/user32/dialog.c:882] in user32 (0x00329b6c) 35 0x7e60a01f PrintDlgA+0x320(lppd=0x3862330) [/srv/vitperov/Projects/wine-dev/dlls/comdlg32/printdlg.c:2165] in comdlg32 (0x00329fec) 36 0x1002bc40 in seon (+0x2bc40) (0x02275608) 37 0x00000006 (0x1003f584) 38 0x100106e0 in seon (+0x106e0) (0x10010400) 39 0x9090c310 (0x03e858b8) 40 0x00000000 (0x00000000) Строка, вызывающая ошибку: 0x7e60c471 PRINTDLG_WMCommandA+0x90d [/srv/vitperov/Projects/wine-dev/dlls/comdlg32/printdlg.c:435] in comdlg32: movzwl 0x4(%esi),%eax 435 copiesSupported = DeviceCapabilitiesA(devname,portname,DC_COPIES,NULL,dm); странно. Без отладчика ошибка возникает уже на строке: devname = ((char*)dn)+dn->wDeviceOffset; При дальнейшем рассмотрении оказалось, что переменные lppd->hDevNames и lppd->hDevMode равны нулю. При проверке на ноль данных значений всё начинает работать. Но данный кусок кода отвечает за дуплексную печать. Сейчас бага решена, но дуплексная печать в Налогоплательщике работать не будет. Можно попробовать найти причину почему передаются нулевые структуры (исли эта причина не в самом Налогоплательщике) место вызова PRINTDLG_UpdatePrintDlgA- строка 2168 функции PrintDlgA Странно, но PRINTDLG_CreateDevNames вызывается только после вызова самого диалога. Возможно донная структура остаётся после предыдущего выбранного принтера, и будет ошибкой вызывать её там, где она сейчас вызывается. Надо проверить что происходит в 1С Проверил. Разница между Налогопл. и 1С следующая: В 1с PrintDlgA вызывается 2 раза: fixme:commdlg:PrintDlgA lppd->hDevMode=(nil), lppd->hDevNames=(nil) fixme:commdlg:PrintDlgA lppd->hDevMode=0x7da85fa, lppd->hDevNames=0x3b466b2 и второй раз с заполненными структурами, а в Налогоплательщике только 1 раз fixme:commdlg:PrintDlgA lppd->hDevMode=(nil), lppd->hDevNames=(nil) Да, теперь я вижу, что предыдущий патч сделан неправильно: берутся старые параметры устройства. Можно попробовать получать их из структуры: LPPRINTER_INFO_2A pi = PrintStructures->lpPrinterInfo; Откатил предыдущий неверный коммит commit 0da85e9a4a9e5f1131aeb473d77659ca749c5b4f Author: Vitaly Perov <vitperov@etersoft.ru> Date: Mon May 26 15:43:41 2008 +0400 [BUGFIX] comdlg32->printdlg.c: FIXES BUG 1686; Pages are printed incorrecly in duplex mode Сделал патч. Приложил в eterwine. WINE@Etersoft 1.0.12 eter5/eter4 Приянто. |