diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 0cb09d3..a6c5c40 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -1870,6 +1870,8 @@ int hg_scanner::save_usb_data(std::shared_ptr data) if (wait_img_.is_waiting()) wait_img_.notify(); } + unsigned int bytes = data->size(); + ui_ev_cb_((scanner_handle)this, SANE_EVENT_USB_DATA_RECEIVED, NULL, &bytes, NULL); return ret; } @@ -2444,13 +2446,10 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) return SCANNER_ERR_INSUFFICIENT_MEMORY; } - char* buf = strcpy((char*)data, fw.c_str()); + if (data) + strcpy((char*)data, fw.c_str()); - if (buf) - { - return SCANNER_ERR_OK; - } - return SCANNER_ERR_DATA_DAMAGED; + return SCANNER_ERR_OK; } else if(code == IO_CTRL_CODE_GET_SERIAL) { @@ -2460,12 +2459,10 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) *len = ser.size(); return SCANNER_ERR_INSUFFICIENT_MEMORY; } - char* buf = strcpy((char*)data, ser.c_str()); - if (buf) - { - return SCANNER_ERR_OK; - } - return SCANNER_ERR_DATA_DAMAGED; + if (data) + strcpy((char*)data, ser.c_str()); + + return SCANNER_ERR_OK; } else if (code == IO_CTRL_CODE_GET_HARDWARE_VERSION) { @@ -2475,13 +2472,10 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) *len = ip.size(); return SCANNER_ERR_INSUFFICIENT_MEMORY; } - char* buf = strcpy((char*)data, ip.c_str()); + if (data) + strcpy((char*)data, ip.c_str()); - if (buf) - { - return SCANNER_ERR_OK; - } - return SCANNER_ERR_DATA_DAMAGED; + return SCANNER_ERR_OK; } else if (code == IO_CTRL_CODE_GET_PAPER_ON) { diff --git a/hgsane/sane_hg_mdw.cpp b/hgsane/sane_hg_mdw.cpp index 05c2b28..bd05f1d 100644 --- a/hgsane/sane_hg_mdw.cpp +++ b/hgsane/sane_hg_mdw.cpp @@ -2024,10 +2024,12 @@ extern "C" { // avoid compiler exporting name in C++ style !!! #ifdef WIN32 +HMODULE g_my_inst = NULL; BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved) { if (reason == DLL_PROCESS_ATTACH) { + g_my_inst = inst; if (g_sane_path.empty()) { char path[MAX_PATH] = { 0 };