执行属于其他进程的外部函数

时间:2011-09-05 14:34:39

标签: c++ windows process ipc

我需要帮助解决问题。我有两个进程在运行,一个是Watchdog,另一个是简单的测试过程。我需要进程2来从Watchdog调用代码,我这样做的原因是为了减少进程2的大小。例如,进程2必须从看门狗调用一个名为“IsSafe”的函数。 IsSafe函数依赖于属于Watchdog进程的其他代码,并且为进程2重写此代码是不可行的。我已经想到了想法,请您就哪个是最佳解决方案提供建议并提供建议。

Idea One

使用命名管道在进程之间进行通信并传递参数并返回值。

理念二

使用共享内存来共享参数和返回值

想法三

使用Windows消息,老实说我认为这不起作用

创意四

以某种方式创建共享内存的可执行部分,并使用far jmp执行此代码。

请你指教。

4 个答案:

答案 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。