Webページを表示し、プリンタを使用して表示されているものを印刷するQt WebEngineアプリケーションをWindows用に作成しています。 Windowsのwinspoolライブラリとこの例を使用してカスタムvkp80IIIチケットプリンタからエラー状態を取得しようとしていますhttps://support.microsoft.com/en-us/kb/160129Qt 5.8 windows printer apiが無効なハンドルエラー
アプリケーションがこのプリントコールを持っています。 (printerStateは無用である、常にアイドル状態のようですが、とにかく):
void printReceipt() {
if (mDefaultPrinter->printerState() == QPrinter::Error) {
this->printCallback(false);
}
else {
this->print(mDefaultPrinter, [=](bool success) { this->printCallback(success); });
}
}
をそして正常に開始し、印刷後の問題、コールバック来る:私はMSDNの例内のデバッグログのカップルを置く
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);
}
をコードがGetPrinter(hPrinter)にしようとすると、INVALID_HANDLE_ERRORを返します。だから私は、プリンタのエラーを取得することを指摘することはありません。最初は間違ったプリンタ名だと思っていたので、LPWSTRに変換するコードの行が異なっています。
だから何が機能: -I GETデフォルトプリンタ名 "CUSTOM VKP80IIIを" それはそこ -OpenPrinter(&ハンドル)がtrueを返すと私はハンドル
問題 -GetPrinter(ハンドル)がfalseを返す取得されるように、 GetLastError()は無効なハンドルです、なぜですか?