0

我们正在尝试拦截 pos 和打印机之间的数据。

我们遇到的问题是当我们将打印机 x 连接到 com0com 端点时,POS 报告打印机 x 处于脱机状态。

com0com 端点两侧的超级终端实例确实相互通信。

我从来不知道有一种方法可以检测硬件是否实际连接到串行端口。通常,无论是否有设备在侦听,我都会写入 com 端口。我知道 pos 使用 opos,因为它是与打印机通信的基本方式。opos 触发什么事件以通知 pos 应用程序认为打印机离线?硬件如何识别设备是否已连接?使用 com0com 时是否有规避此事件的方法?

4

1 回答 1

2

OPOS 遵循三个步骤过程:Open()、ClaimDevice() 和 Enable。调用 Open() 将导致 OPOS 公共控制对象 (OPOS CCO) 构造供应商提供的设备特定服务对象 (SO),然后它将调用 SO 上的 Open() 方法。这会初始化软件,但此时可能不会尝试与设备对话。

ClaimDevice() 与 SO 协商以确保设备可共享且可供应用程序使用。正是在这个时候,设备可以被报告离线。ClaimDevice() 将引发异常,ResultCode 指示 OPOS_E_OFFLINE。

如果设备处于脱机状态,将启用设置为 true 或执行打印活动可能会使呼叫失败。例如,有人可能会在打印过程中拔掉打印机电源。

SO 负责执行与设备的协商和通信。供应商提供的 OPOS 安装包通常会为您安装和配置 SO。但您有责任确保正确配置 SO 以与正确的端口和设备通信。如果配置不正确,调用 ClaimDevice() 时会出现设备离线错误。

于 2013-04-22T20:49:30.570 回答