Я реализовал класс, который получает локальные принтеры и, в зависимости от опции приложения, использует один из доступных локальных принтеров.
Во-первых, класс перечисляет принтеры (EnumPrinters - PRINTER_ENUM_LOCAL) и сохраняет соответствующий PRINTER_INFO_2. Затем он получает возможности принтера (DeviceCapabilites) и DEVMODE. Каждый экземпляр класса будет иметь доступ к одному принтеру.
Когда приложение выбирает параметр печати, оно выбирает, какой принтер будет использоваться, и соответствующий ему экземпляр класса. Затем этот экземпляр создает контекст устройства:
m_hdc = CreateDC (m_pi2->pDriverName, m_pi2->pPrinterName, NULL, m_pdm));
, где
HDC m_hdc;
PRINTER_INFO_2 * m_pi2;
DEVMODE * m_pdm;
и обработайте все данные печати соответственно.
Проблема в том, что иногда CreateDC возвращает NULL, а GetLastError () возвращает ERROR_FILE_NOT_FOUND (2).
Я имею в виду «иногда», потому что на других машинах, с тем же принтером, тем же процессором, тем же образом Windows XP SP3 и теми же тестовыми данными, CreateDC обрабатывает правильно. Кроме того, при переустановке системы и приложения проблема иногда исчезает.
Я с нетерпением жду любых предложений, которые помогут мне выяснить проблему.
Заранее спасибо.