我们想支持最近已经停产了一些硬件。对于硬件的驱动程序是一个普通的32位C DLL。我们没有源代码,并(出于法律原因)不感兴趣,反编译或逆向工程的驱动程序。

在硬件快速发送大量数据,所以通信协议需要是相当有效的。

我们的软件是一个本机64位C ++程序,但我们想通过一个32位的过程中存取的硬件。什么是32位和64位应用程序相互进行通信(即,理想情况下,不涉及发明一种新的协议)?

一种高效,优雅的方式

在解决方案应该是在C / C ++。

更新:几个被访者要求澄清这是否是一个用户模式或内核模式驱动程序。幸运的是,这是一个用户模式驱动程序。

有帮助吗?

解决方案

如果这是一个真正的驱动程序(内核模式),你SOL。 Vista x64系统不允许安装未签名的驱动程序。它这仅仅是一个用户模式DLL,您可以使用任何标准IPC机制得到修复。连接管,出的进程内COM,大致的顺序。这一切都那么只要运行在总线速度,你可以缓冲足够的数据,上下文切换开销不应该伤害太大。

其他提示

我只想用插座。这将允许你,如果你需要在将来使用它在IP,你就不会被束缚在一个消息API。如果将来要实现此另一个OS或语言,就可以了。

本文可能会感兴趣。它讨论问题,然后建议使用COM作为解决方案。我不是COM的忠实粉丝,但在Windows宇宙鉴于其无处不在,这是可能的,这可能是足够的效率。你可能会想建筑师您的解决方案,让您可以批量数据(你不想做一个COM调用每个数据项)。

优雅? C ++? DCOM / RPC调用自己可能会奏效,或者你可以创建一个命名管道,并使用这两个过程之间的交谈(也许创造“的CMessage类”或某事),但注意x86和x64之间不同的结构比对。

如果司机确实变成是一个真正的驱动程序,nobugz几乎是正确的 - 你将不得不更加努力才行,你不能完全SOL。一种解决方案是一些其它机器(或虚拟机)上安装的Win32,然后使用某种形式的RPC的,如套接字(如由Pyrolistical建议的)或UDP或MQ或甚Tibco的集合(其声称支持非常高的吞吐量,以便以处理金融市场所产生的数据量 - 至少这是我从回想起昔日)

一个内存映射文件,由双方共享将具有相同的内容。操作系统将不得不做一些有趣的东西指针做到这一点,但很可能将能够建立这样一种方式,你不是身体周围复制内存中的2次。零个拷贝为约尽善尽美

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top