我们希望支持一些最近停产的硬件。硬件驱动程序是一个普通的 32 位 C DLL。我们没有源代码,并且(出于法律原因)对驱动程序的反编译或逆向工程不感兴趣。
硬件快速发送大量数据,因此通信协议(protocol)需要非常高效。
我们的软件是 native 64 位 C++ 应用程序,但我们希望通过 32 位进程访问硬件。 32 位和 64 位应用程序相互通信的高效、优雅的方式是什么(理想情况下,不涉及发明新协议(protocol))?
解决方案应该是 C/C++。
更新:一些受访者要求澄清这是用户模式还是内核模式驱动程序。幸运的是,它是一个用户模式驱动程序。
最佳答案
如果这是一个真正的驱动程序(内核模式),你就是 SOL。 Vista x64 不允许安装未签名的驱动程序。这只是一个用户模式 DLL,您可以使用任何标准 IPC 机制来修复。管道、套接字、进程外 COM,大致按此顺序。这一切都以总线速度运行,因此只要您可以缓冲足够的数据,上下文切换开销就不会造成太大伤害。
关于c++ - Windows x64 上 32 位和 64 位应用程序之间的进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/505647/