1

我正在开发一个 Google Chrome Twain 插件,实际上它几乎完成了。唯一的主要问题仍然存在:该插件在 Windows XP 下无法运行。这不是我们想要的。

该插件使用 Chrome Native Messaging 在 Chrome 和单独的扫描进程之间建立通信,并使用 TwainDotNet与 TWAIN 接口。

不幸的是,没有什么可以阻止 TWAIN 驱动程序向 stdout/stderr 发送任何文本,所以我被迫使用两阶段解决方案:本机消息传递主机的第一个进程通过 stdin/stdout 与 Chrome 通信,第二个进程与第一个通过匿名管道并真正完成工作(即处理消息和与 TWAIN 的接口)。

不知何故,第二个过程的管道成为 TWAIN 的问题。经过一些实验,我发现如果我在第二个进程中不创建任何管道,或者如果我创建了管道但不使用它们 - 即我不读取或写入管道,一切都会好起来的。但是,如果管道上只有一次读取或写入,则任何使用 TWAIN 的操作都会挂起,就好像线程中没有运行消息循环一样。

因此,我认为使用管道,我的意思是在管道上执行读写操作,以某种方式破坏了 TWAIN 正常工作所需的消息循环。

我是 Windows 消息处理的新手,所以

  1. 当我使用匿名管道时,我没有完全理解应用程序中发生了什么,并且
  2. 使用管道如何干扰 TWAIN,以及
  3. 为什么问题只出现在 Windows XP 下。

我唯一的想法是匿名管道异步IO是通过windows消息实现的。因此,我将感谢有助于解决此问题的信息和/或建议。

插件源可以在我的 GitHub 存储库中找到(解决方案 TwainScan): https ://github.com/ballamuth/Chrome4Net/tree/master/examples

4

0 回答 0