【问题标题】:Twain always returns TWRC_NOTDSEVENT吐温总是返回 TWRC_NOTDSEVENT
【发布时间】:2020-09-21 18:19:39
【问题描述】:

我在我的应用程序中使用 twain 2.3 (TWAINDSM.DLL) 和 HP Scanjet 200 TWAIN 协议 1.9。

我的 TWAIIN 调用是:

OpenDSM: DG_CONTROL, DAT_PARENT, MSG_OPENDSM

OpenDS: DG_CONTROL, DAT_IDENTITY, MSG_OPENDS

EnableDS: DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS

ProcessDeviceEvent: DG_CONTROL, DAT_EVENT, MSG_PROCESSEVENT

由于上次调用,我总是得到TWRC_NOTDSEVENT 而不是TWRC_DSEVENT

可以请人帮忙吗?

【问题讨论】:

    标签: twain


    【解决方案1】:

    一旦使用DG_CONTROL / DAT_EVENT / MSG_PROCESSEVENT,来自应用程序消息循环的所有消息都必须发送到数据源进行处理。接收到TWRC_NOTDSEVENT 意味着转发的消息不是发给源的,因此应用程序应该正常处理它。

    继续将所有消息转发到源,直到您收到MSG_XFERREADY,这意味着有数据要传输。传输完成并且您已发送 MSG_DISABLEDS 后,您就可以停止向源转发消息了。

    【讨论】:

      【解决方案2】:

      吐温是一个标准,当许多公司实施该标准时,并非所有公司都采用相同的方式。在支持 Twain 的过程中,我们将学习和调整代码以支持所有不同的实现。

      我以前遇到过这种情况,这是我的解决方法:
      除了将 (rc == TWRC_DSEVENT) 放在代码的开头(之后将跳过下面的 MSG_XFERREADY 处理),您可以在 MSG_XFERREADY 处理之后将比较移到末尾,以便始终检查和处理 MSG_XFERREADY。
      (rc == TWRC_DSEVENT) 只是决定我们是否应该转发窗口消息。

      【讨论】:

        【解决方案3】:

        我不知道你的具体情况。我遇到了类似的问题,因为我使用来自另一个进程的 HWND/wId 调用了OpenDSM。您应该使用 HWND 调用 OpenDSM 当前进程拥有的活动窗口/对话框。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多