Я столкнулся с некоторым странным поведением - кажется, невозможно перечислить разрешения для струйных принтеров Epson в Windows. в частности, этот код всегда сообщает об ошибке:
int r, err;
char szBuffer[0x4000];
String prnName = "EPSON P50 Series";
String portName = "USB002";
r = DeviceCapabilities(prnName.c_str(), portName.c_str(), DC_ENUMRESOLUTIONS, NULL, NULL);
err = GetLastError();
printf("\n 1.DevCap.result = %d, err = %d", r, err);
r = DeviceCapabilities(prnName.c_str(), portName.c_str(), DC_ENUMRESOLUTIONS, szBuffer, NULL);
err = GetLastError();
printf("\n 2.DevCap.result = %d, err = %d", r, err);
В выводе вижу следующее:
1.DevCap.result = -1, err = 0
2.DevCap.result = -1, err = 13
Примечание. Ошибка Windows 13 — ERROR_INVALID_DATA
.
Не могли бы вы помочь мне понять - как правильно это интерпретировать? Означает ли это, что драйверы для струйных принтеров Epson не предоставляют никакой информации о поддерживаемых разрешениях печати? Или действительно переданы какие-то недопустимые параметры? Если да, то какой это может быть?
Заранее спасибо.
PS. Обратите внимание на следующее:
1) Имена принтеров и портов правильные. Они получаются с помощью EnumPrinters()
вызова WinAPI. В этом примере кода я вырезал весь ненужный код, поэтому оставил только те функции, которые не работают.
2) Сам принтер работает нормально, я могу печатать на нем документы и фотографии.
3) Также я добавил принтер "Epson Stylus 300", который настроен на использование порта "ФАЙЛ:" для печати. И что интересно - вызов DeviceCapabilities(DC_ENUMRESOLUTIONS)
для такого принтера тоже выдает ошибку № 13. Поэтому я склоняюсь к тому, что все струйные принтеры Epson не предоставляют никакой информации о разрешении печати...
4) Все остальные вызовы функции DeviceCapabilities()
(для DC_PAPERS, DC_PAPERSIZE
, DC_PAPERNAMES
и т. д.) нормально работают для этих принтеров (Epson P50 и Epson Stylus 300). Итак, имя принтера и имя порта правильные, проблема существует только для вызова DeviceCapabilities(DC_ENUMRESOLUTIONS)
.
DC_ENUMRESOLUTIONS
. Установите принтер другой фирмы, возможно, он будет работать. - person Barmak Shemirani   schedule 21.01.2016