我需要帮助解决问题。我有两个进程在运行,一个是Watchdog,另一个是简单的测试过程。我需要进程2来从Watchdog调用代码,我这样做的原因是为了减少进程2的大小。例如,进程2必须从看门狗调用一个名为“IsSafe”的函数。 IsSafe函数依赖于属于Watchdog进程的其他代码,并且为进程2重写此代码是不可行的。我已经想到了想法,请您就哪个是最佳解决方案提供建议并提供建议。
Idea One
使用命名管道在进程之间进行通信并传递参数并返回值。
理念二
使用共享内存来共享参数和返回值
想法三
使用Windows消息,老实说我认为这不起作用
创意四
以某种方式创建共享内存的可执行部分,并使用far jmp执行此代码。
请你指教。
答案 0 :(得分:2)
RPC很久以前就被发明了。然后COM就在那之上。在我看来,最好忘记你的想法,但如果你必须,请使用COM。
顺便说一下,要在没有COM的同一台Windows机器上的进程之间进行通信,请使用邮件槽。
似乎你在列表中忘记了它们。
干杯&第h。,
答案 1 :(得分:0)
DLL是构思4的标准实现。它在两个地址空间中加载,但在物理RAM中共享。你不需要特殊的技巧;它可以在任何地方使用,Windows将为您处理任何安全问题。
它也可以移植到大多数其他操作系统,尽管它们通常被称为其他操作系统,例如.so在Linux上。
答案 2 :(得分:0)
虽然将代码放在需要调用它的进程中通常是很好的建议,但在监视程序(也是调试器和任何其他形式的错误处理程序)的特定情况下使用单独的进程是正确的。您不希望看门狗由于主代码中的错误而失败,因此它需要是一个单独的过程。
在这种情况下,命名管道是理想的,TransactNamedPipe
function就是为此而设计的。
答案 3 :(得分:0)
你真正需要的只是一些IPC。对于轻量级和简单的解决方案,只需使用WM_APP定义特定于应用程序的消息,并从wParam / lParam获取参数的映射。如果您发现需要超过8个字节,则可以使用WM_COPYDATA。