【发布时间】:2011-12-07 18:58:24
【问题描述】:
我已经实现了一个获取本地打印机的类,并根据应用程序选项使用可用的本地打印机之一。
首先,该类枚举打印机(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 可以正确处理。另外,重装系统和应用程序问题消失有时不会。
我期待听到任何有助于我找出问题的建议。
提前谢谢你。
【问题讨论】:
-
根据我的经验,GetLastError() 不会从 CreateDC()(或大多数 GDI 函数)返回可靠信息。我不会在错误实际上是 2 中投入太多。
-
@HansPassant:为什么要更新打印机驱动程序来解决这个问题?
标签: windows winapi printing gdi