CreateDC()因lasterror 2而失败

时间:2011-10-14 13:49:08

标签: windows winapi printing gdi

我已经实现了一个获取本地打印机的类,并且根据应用程序选项,使用了一个本地打印机。

首先,该类枚举打印机(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正确处理。另外,重新安装系统和应用程序时问题有时会消失。

我期待听到任何有助于我找出问题的建议。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

加载打印机驱动程序所需的文件听起来像是一个问题。您可以使用Process Monitor(可从microsoft.com下载的免费SysInternals工具)获取有关错误发生时正在发生的事情的大量信息。我会捕获并查看失败的文件和注册表访问。它在一台特定机器上间歇性失败的事实似乎与混乱的驱动程序配置一致。

您可以尝试的另一件事是创建信息上下文而不是设备上下文。您无法使用IC进行打印,但可以查询有关设备的信息,这可能是获取其他信息的一种方式。