-
Привет всем. Вот кусок кода if not OpenPrinter(PChar(vPrinterName), hPrinter, nil) then begin log('Can''t connect to printer'); end else begin ... end;
Так вот в Windows 7. Отрабатывает без каких либо проблем и с локальными и с сетевыми принтерами.
Есть одна система с Windows XP Embedded POSReady на ней не работает, возвращает false и хоть убей.
Читал про OpenPrinter2 что там мол флаг чтоб не использовать локальный кеш, с ней та же история на 7ке работает, на этой POSReady дает ошибку "External exception C06D007F"
Кто сталкивался помогите.
-
Код ошибки достаточно известный, если на пальцах, то ошибка при подгрузке библиотеки заявленной в секции отложенного импорта. от этого и пляши
-
Да, нюанс, это не означает что именно в твоем приложении ошибка, она может быть в какой-то сторонней библиотеке, которая грузится к твоему процессу
-
Спасибо. Буду смотреть. На Win8 проверил, тоже все отлично работает
-
Разобрался с OpenPrinter отработала так: Printer.GetPrinter(vDevice, vDriver, vPort, hDeviceMode);
if not OpenPrinter(@vDevice, hPrinter, @vDefaults) then begin
log('Can''t connect to printer: '+ vPrinterName +' driver', 'PrinterState');
end; Только вот теперь незадача, походу читает оно с кеша информацию, как часто он обновляется, и можно-ли его обновить принудительно?
-
Также выяснил что Windows XP Embedded POSReady не поддерживает ф-цию OpenPrinter2))))))
Подскажите какие API функции использовались в WinXP для корректного чтения очереди сетевого принтера?
-
EnumJobs?
-
Ну дык. Она и используется. Проблема в том что с сетевым принтером работает не коректно
-
Сначала вызываю OpenPrinter2(с флагом PRINTER_OPTION_NO_CACHE) после этого полученный хендл использую в EnumJobs. Так работает с любыми принтерами но только в системах > Vista
В купе с OpenPrinter работает без ошибок но возвращает некорректное количество заданий в очереди. Т.е. очередь уже пуста а я по прежнему получаю к примеру 3 задания.
-
-
И с сетевыми корректно работало?
-
Угу
|