From fc8ca14ec5ce315746591f79f73811a9f5daa681 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Thu, 22 Sep 2022 16:25:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=BE=E5=A4=87=E6=89=93?= =?UTF-8?q?=E5=BC=80=E5=A4=B1=E8=B4=A5=E6=8F=90=E7=A4=BA=EF=BC=9B=E6=94=B9?= =?UTF-8?q?=E5=8F=98=E5=90=AF=E5=8A=A8=E6=89=AB=E6=8F=8F=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=E6=8F=90=E7=A4=BA=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/scanner.cpp | 37 ++++++++++++++++++++++++++++++++----- sane/scanner.h | 1 + twain/twain/huagaods.cpp | 9 +++++++-- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/sane/scanner.cpp b/sane/scanner.cpp index 68ed065..3bf5b63 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -293,6 +293,11 @@ int scanner::open(void) load_config((cfg_path_ + scanner_name_).c_str()); // apply_config(); } + else + { + std::wstring msg(local_trans::a2u(hg_scanner_err_description(ret), CP_UTF8)); + MessageBoxW(NULL, msg.c_str(), L"\u6253\u5F00\u5931\u8D25", MB_OK | MB_ICONERROR); + } return ret; } @@ -1689,9 +1694,16 @@ COM_API_IMPLEMENT(scanner, int, start(void)) img_fmt_.img_format = SANE_IMAGE_TYPE_BMP; img_fmt_.compress.compression = cmprsn; } - else if (indicator_.get()) + //else if (indicator_.get()) + //{ + // indicator_->notify_scan_over(hg_scanner_err_description(ret), true); + //} + else { - indicator_->notify_scan_over(hg_scanner_err_description(ret), true); + std::wstring msg(local_trans::a2u(hg_scanner_err_description(ret), CP_UTF8)); + if (indicator_.get()) + indicator_.reset(); + MessageBoxW(NULL, msg.c_str(), L"\u542F\u52A8\u5931\u8D25", MB_OK | MB_ICONERROR); } prev_start_result_ = ret; is_scanning_ = ret == SANE_STATUS_GOOD; @@ -2237,7 +2249,10 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len) return 0; } - +int scanner::last_error(void) +{ + return err_; +} @@ -2337,9 +2352,21 @@ int __stdcall open_scanner(SCANNERID scanner_id, ISaneInvoker** invoker) return SCANNER_ERR_DEVICE_NOT_FOUND; scanner* scn = new scanner(scanner_id); - *invoker = dynamic_cast(scn); + if (scn->last_error() == SCANNER_ERR_OK) + { + *invoker = dynamic_cast(scn); - return 0; + return 0; + } + else + { + int ret = scn->last_error(); + + scn->release(); + *invoker = NULL; + + return ret; + } } #ifdef EXPORT_SANE_API __declspec(dllexport) diff --git a/sane/scanner.h b/sane/scanner.h index 5731221..e79e1fb 100644 --- a/sane/scanner.h +++ b/sane/scanner.h @@ -325,4 +325,5 @@ public: // methods: public: int handle_device_event(int ev_code, void* data, unsigned int* len); + int last_error(void); }; \ No newline at end of file diff --git a/twain/twain/huagaods.cpp b/twain/twain/huagaods.cpp index c662ccd..cb3d1dd 100644 --- a/twain/twain/huagaods.cpp +++ b/twain/twain/huagaods.cpp @@ -679,6 +679,8 @@ Twpp::ConditionCode huagao_ds::condition_code_from_hg_error(int hgerr) return Twpp::ConditionCode::DamagedCorner; if (hgerr == SCANNER_ERR_DEVICE_NO_PAPER) return Twpp::ConditionCode::NoMedia; + if (hgerr == SCANNER_ERR_OPENED_BY_OTHER_PROCESS) + return Twpp::ConditionCode::MaxConnections; return (Twpp::ConditionCode)((int)Twpp::ConditionCode::CustomBase + hgerr); } @@ -921,13 +923,16 @@ Result huagao_ds::userInterfaceEnable(const Identity&, UserInterface& ui) return seqError(); scanner_->twain_set_transfer((twain_xfer)m_capXferMech); - - if (scanner_->start() == SCANNER_ERR_OK) + int err = scanner_->start(); + if (err == SCANNER_ERR_OK) { return success(); } else { + if (err == SCANNER_ERR_DEVICE_NO_PAPER) + return { ReturnCode::Failure, ConditionCode::NoMedia }; + return bummer(); } }