我有一些问题。这是我的代码:
typedef BOOL (WINAPI *pPrintUIEntry)(HWND, HMODULE, wchar_t *, DWORD);
printuiDll = LoadLibrary("printui.dll");
if (printuiDll == NULL)
{
printf("Error LoadLibrary %d.\n", GetLastError());
return -1;
}
PrintUIEntry = (pPrintUIEntry) GetProcAddress(printuiDll, "PrintUIEntryW");
if (PrintUIEntry == NULL)
{
printf("Error GetProcAddress %d.\n", GetLastError());
return -1;
}
//cmd is /ia /m "Printer" /f "C:\Program Files x86)\\drivers\Printer\Printer.inf
if (PrintUIEntry(GetDesktopWindow(), printuiDll, cmd, SW_SHOW))
{
printf("Error PrintUIEntry %d.\n", GetLastError());
return -1;
}
抱歉,我无法复制代码,这是我的大学作品。我遇到的问题是 PrintUIEntry
返回 0,它给我错误代码 2
。我尝试用谷歌搜索一下这个功能,但我发现了很多。希望你能帮忙。谢谢。
我已检查并且文件存在。
最佳答案
如果您阅读了文档:
INFO: Windows Rundll and Rundll32 Interface
Rundll32 printui.dll,PrintUIEntry
您会发现 PrintUIEntryW
函数指针的声明是错误的。最重要的是,设计为由 rundll32
调用的函数没有返回值,并且 PrintUIEntry
未记录为使用 SetLastError()
用于错误报告。
因此在这种情况下您无法进行任何类型的错误检查。
您正在检查不存在的
BOOL
值,这意味着您正在检查EAX 中存储的任何随机值
当PrintUIEntryW
退出时CPU注册。PrintUIEntryW
没有您可以检查的返回值。您正在调用
GetLastError()
来检索由SetLastError()
设置的最后一个错误代码。这可能与任何PrintUIEntryW
错误相关,也可能无关,因为它没有记录行为。例如,PrintUIEntryW
可能在内部使用其他 API,这些 API 可能会使用SetLastError()
/GetLastError()
来报告自己的错误,并且会由PrintUIEntryW
内部处理。任何调用PrintUIEntryW
的代码都不应解释此类错误,因为该代码没有解释错误的上下文。
在这种情况下,该问题将成为 How to check the result of PrintUIEntry call 的重复问题.
由于您正在尝试安装打印机,请考虑使用 AddPrinter()
或InstallPrinterDriverFromPackage()
相反。
关于c - 如何修复 PrintUIEntry 返回错误代码 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39754211/