Winapi 在与打印机兼容的设备上下文中调用Windows SelectObject将返回NULL

Winapi 在与打印机兼容的设备上下文中调用Windows SelectObject将返回NULL,winapi,printing,Winapi,Printing,最近的一次Windows 10更新(可能也是神秘的)似乎产生了这样的效果:在打印机兼容的设备上下文中执行时,使用位图句柄作为参数的调用将返回NULL 相关的行可以在这里看到,它在早期的Windows10版本上运行良好,并且在过去十年中似乎运行良好。您可以在中找到完整的最小工作示例 hBitmap=(hBitmap)LoadImage(NULL,szFileName,IMAGE_位图,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFIL

最近的一次Windows 10更新(可能也是神秘的)似乎产生了这样的效果:在打印机兼容的设备上下文中执行时,使用位图句柄作为参数的调用将返回NULL

相关的行可以在这里看到,它在早期的Windows10版本上运行良好,并且在过去十年中似乎运行良好。您可以在中找到完整的最小工作示例

hBitmap=(hBitmap)LoadImage(NULL,szFileName,IMAGE_位图,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE | LR_VGACOLOR);
// [...]
HDC prn=GetPrinterDC(hwnd);
hdcMem=CreateCompatibleDC(prn);
HBITMAP hbmOld=(HBITMAP)选择对象(hdcMem,HBITMAP);
//hbmOld此时为空,表示SelectObject失败

问题在之后停止出现,但这显然不是一个长期解决方案。

看起来与我的问题类似:(通过卸载KB5000808/802解决了问题)@RemyLebeau根据,并且SelectObject仅在出现错误时返回NULL。在我发布的示例中,它在Windows更新后返回NULL,在这种情况下不会打印任何内容。为了确认SelectObject()是这里唯一的问题,在启动时从常规窗口的HDC创建HDC,使用SelectObject()在其中选择位图,然后稍后使用该内存DC将最终打印位图。不幸的是,这不是任何形式的解决方案。嗨,我现在可以复制这个问题。我会和内部工程师确认,如果有任何更新,我会在这里回复。谢谢你的理解。根据这一点,微软似乎已经承认了这个错误,并正在进行修复。