我使用 CreateDC 进行打印,传入有效的 DEVMODE 结构并返回 NULL,这表明有错误,但 GetLastError 返回 0。
m_hDC = ::CreateDC(L"WINSPOOL", PrinterName, NULL, pDevMode); if (m_hDC == NULL) { throw Exception(GetLastError(), __LINE__, _T(__FILE__)); }
这对我的所有客户都有效,除了一个,有什么想法吗?
事实证明这是 thunking spooler api 的问题。
该软件是运行在64位系统上的32位Windows服务。
似乎一次只有一个用户/会话可以从 32 位进程进行打印,下一个用户必须等待 splwow64.exe 超时(或杀死它)才能打印。
它包含在 Microsoft 的 KB972616 存档中。
您确定
pDevMode
NULL
DEVMODE