Qt 5.8 windows打印机api无效句柄错误
Qt 5.8 windows printer api invalid handle error
我正在为Windows创建一个Qt WebEngine应用程序,该应用程序显示网页并使用打印机打印出显示的任何内容。我正在尝试使用windows的winspool库和此示例https://support.microsoft.com/en-us/kb/160129从我的自定义vkp80III票据打印机中获得错误状态
App有这个打印调用。(printerState是无用的,它似乎总是空闲的,但无论如何):
void printReceipt() {
if (mDefaultPrinter->printerState() == QPrinter::Error) {
this->printCallback(false);
}
else {
this->print(mDefaultPrinter, [=](bool success) { this->printCallback(success); });
}
}
然后问题来了,打印成功后回调:
void printCallback(bool success){
DWORD size;
bool result = GetDefaultPrinter (NULL, &size);
qDebug() << "LEN: " << size;
LPWSTR pname = (LPWSTR)malloc(size+1);
result = GetDefaultPrinter(pname, &size);
if(!result){
qDebug() << "GetDefaultPrinter err: " << GetLastError();
}
else {
pname[size] = 0;
qDebug() << "PRINTER NAME: " << &pname << ", LEN: " << size;
}
QString name = mDefaultPrinter->printerName();
//These give more or less odd results
//wchar_t* w_str = const_cast<wchar_t*>(name.toStdWString().c_str());
//LPWSTR w_str = (LPWSTR)name.utf16();
/*wchar_t* w_str = (wchar_t*) malloc (sizeof(wchar_t)*name.length()+1);
int len = name.toWCharArray(w_str);
w_str[len]=0;*/
//OpenPrinter example uses LPHANDLE but that didn't work
HANDLE hPrinter = NULL;
PRINTER_DEFAULTS pd;
ZeroMemory(&pd, sizeof(pd));
pd.DesiredAccess = PRINTER_ALL_ACCESS;
qDebug() << "TRYING GET PRINTER: " << name;
if(OpenPrinter(pname, &hPrinter, &pd)) {
qDebug() << "GOT PRINTER ERR STATE: " << IsPrinterError(&hPrinter);
}
free(pname);
emit printReceiptComplete(success);
}
我在MSDN示例中放置了一对调试日志,它显示当代码尝试GetPrinter(hPrinter)时,它返回INVALID_HANDLE_ERROR。所以我从来没有得到打印机的错误。首先,我认为这是错误的打印机名称,这就是为什么有不同的代码行来获取它/将其转换为LPWSTR。
那么什么是有效的呢?-我得到默认打印机的名称"CUSTOM VKP80III",所以它在那里-OpenPrinter(&handle)返回true,我得到句柄
问题getprinter (handle)返回false而GetLastError()是无效句柄,为什么?
哦,现在太多的捂脸了。:
IsPrinterError(&hPrinter);
应该是这样的:
IsPrinterError(hPrinter);
相关文章:
- 枚举进程模块在有效句柄上返回无效句柄
- 未知C++错误:致命错误:glibc检测到无效的stdio句柄
- 获取进程内存信息失败,错误 6 句柄无效
- 发布信号量返回错误 6(无效句柄)
- 如何测试 USB HID 句柄由于设备被重新插入而无效
- 为什么错误1400无效的窗口句柄
- 打电话给谁是无效的关闭手(句柄)是安全的吗?
- 在列表视图中启用分组 - 无效句柄
- DirectShow BindToObject返回无效句柄
- DoModal 返回 -1 Getlasterror 说句柄无效
- C++RegOpenKeyEx-错误6:句柄无效
- 错误 6 句柄在 Windows 上写入文件无效
- 错误 1400 无效的窗口句柄
- 无效句柄(使用应用程序验证程序)
- Qt 5.8 windows打印机api无效句柄错误
- FindFirstFile总是返回无效句柄
- ReadFileEx使用CreateFile的有效句柄时出现无效句柄错误
- GetThreadContext返回错误6,无效句柄
- OpenProcess函数返回无效句柄
- 为什么创建文件返回无效句柄