Created attachment 1270 [details] Пример ошибки Конфигурация Торговля и склад. Реестр документов не выводится на печать - задание просто пропадает. При этом в консоль валится fixme:psdrv:PSDRV_SelectBitmap stub fixme:bitmap:BITMAP_SetOwnerDC Trying to select bitmap 0x3d18 in different DC type Ошибка возникает из-за неправильно работающей функции Biblt() (http://bugs.etersoft.ru/show_bug.cgi?id=664) Предлагается сделать хак, который будет вместо мусора заполнять 0.
В этом случае а) не будет обращений к неинициализированной памяти (мусору), которая ведёт к падению б) Линии будут нормально чёрными Если конечно я правильно понимаю проблему.
Created attachment 1295 [details] Реестр документов в Windows
Created attachment 1296 [details] Реестр документов в Wine
Выложил патч. Проблема с функцией StretchBlt. В случае работы с DC принтера она вызывает StretchDIBits. Перед этим происходит заполнение bits. В данном случае этого сделать не удается. Bitmap, который находится в hdcSrc, имеет пустое bmBits равное NULL. Не совсем понятно почему так происходит, ведь в windows пунктирная линия копируется. Из-за этого в bits оказывается мусор, который и выводится на печать. Решение заключается в проверке результата работы GetDIBits. Если возвращаемое значение равно 0, тогда область памяти bits заполняется нулями.
Created attachment 1300 [details] Реестр документов в Wine с патчем После приложения патча линии выглядят так.
WINE@Etersoft 1.0 SQL 1.0.11-eter8.3/4 Печатается корректно. Линии нормально чёрные. Только смущает их неодинаковая толщина. Закрываю.