【发布时间】:2015-01-21 21:47:06
【问题描述】:
我正在尝试从Windows Driver Kit (WDK) 8.1 Samples(位图示例)打印测试页。由于我没有得到任何打印输出,因此我在每次调用“DrvWriteSpoolBuf”之后都调用了“GetLastError”:
dwWritten = pDevObj->pDrvProcs->DrvWriteSpoolBuf(pDevObj, (void*)&(pOemPDEV->bmFileHeader), sizeof(BITMAPFILEHEADER));
DWORD pdwReturn = GetLastError();
if (pdwReturn != ERROR_SUCCESS)
ERR("OEMEndDoc: Error printing=%ld\n", pdwReturn);
我收到错误 183 !!!来自System Error Codes:
ERROR_ALREADY_EXISTS
183 (0xB7)
Cannot create a file when that file already exists.
上述调用的替代版本
DWORD res = pOemPDEV->pOEMHelp->DrvWriteSpoolBuf(pDevObj, &(pOemPDEV->bmFileHeader), sizeof(BITMAPFILEHEADER), &dwWritten);
我得到 res=E_FAIL
(为使用粗体表示歉意 - cmets 似乎忽略了这个结果)
我怎样才能从打印中得到这样的错误? (到 LPT1 或 FILE: 端口)
我已经通过将我尝试发送到后台处理程序的确切内容保存到位图来测试代码,位图已正确创建。
...我很抱歉没有包含更多代码,它可以在我上面发布的链接中找到...Windows Driver Kit (WDK) 8.1 Samples
Windows Driver Kit (WDK) 8.1 Samples\OEM 打印机自定义插件 Samples\C++\bitmap
【问题讨论】:
-
只有在函数实际失败时才应调用
GetLastError,并且记录为在失败时设置最后一个错误代码。 -
我一直在努力解决这个问题,并在网络上看到了调用 GetLastError 的示例...该命令确实失败了,因为我尝试使用返回 S_OK 或 S_FAIL 的版本...它返回 E_FAIL... 我不知道特定命令必须返回错误,我认为该过程确实如此?
-
GetLastError完全按照所说的去做,它得到了最后一个错误。如果您调用的函数没有失败,那么您正在查看发生在其他地方的错误,可能来自您没有直接调用的函数,并且由于您的函数没有失败而可能已处理。 -
我的功能确实失败了。正如我所解释的......当我发现它的一个版本返回失败代码时......没关系,不过,请看我的回答,我找到了原因
-
@JonathanPotter - 只是好奇 - 我从未见过 c/c++ 函数“记录为在失败时设置最后一个错误代码” - 我在哪里可以看到?
标签: c++ windows printing system-error