Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows CreateDC()失败,最后出现错误2_Windows_Winapi_Printing_Gdi - Fatal编程技术网

Windows CreateDC()失败,最后出现错误2

Windows CreateDC()失败,最后出现错误2,windows,winapi,printing,gdi,Windows,Winapi,Printing,Gdi,我实现了一个类,该类获取本地打印机,并根据应用程序选项使用一个可用的本地打印机 首先,该类枚举打印机(EnumPrinters-PRINTER_ENUM_LOCAL)并保存相应的打印机信息2。然后,它获得打印机功能(DeviceCapabilites)和DEVMODE。每个类实例将访问一台打印机 当应用程序选择“打印”选项时,它将选择要使用的打印机及其相应的类实例。然后,此实例创建设备上下文: m_hdc = CreateDC (m_pi2->pDriverName, m_pi2-

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

首先,该类枚举打印机(EnumPrinters-PRINTER_ENUM_LOCAL)并保存相应的打印机信息2。然后,它获得打印机功能(DeviceCapabilites)和DEVMODE。每个类实例将访问一台打印机

当应用程序选择“打印”选项时,它将选择要使用的打印机及其相应的类实例。然后,此实例创建设备上下文:

    m_hdc = CreateDC (m_pi2->pDriverName, m_pi2->pPrinterName, NULL, m_pdm));
在哪里

并相应地处理所有打印数据

问题是,有时CreateDC返回NULL和GetLastError()返回错误文件(2)

我的意思是“有时”,因为在其他机器中,使用相同的打印机、相同的处理器、相同的WindowsXPSP3图像和相同的测试数据,CreateDC处理正确。此外,重新安装系统和应用程序时,问题有时会消失

我期待着听到任何有助于我发现问题的建议


提前谢谢。

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


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

根据我的经验,GetLastError()不会从CreateDC()返回可靠的信息(或者大部分GDI函数)。我不会对实际为2的错误作太多的估计。@HansPassant:为什么要更新打印机驱动程序来解决这个问题?我非常怀疑丢失的文件会导致这个问题,但这足够简单,可以进行测试。打开任何应用程序(记事本就可以了)并打印一些东西。如果打印出来,说明驱动程序正常,问题出在OP的代码中。
    HDC m_hdc;
    PRINTER_INFO_2 * m_pi2;
    DEVMODE * m_pdm;