执行属于其他进程的外部功能

Execute External function belonging to other process

本文关键字:外部 功能 进程 属于 其他 执行      更新时间:2023-10-16

我需要帮助解决一个问题。我有两个进程在运行,一个是看门狗,另一个是简单的测试进程。我需要进程2从看门狗调用代码,我这样做的原因是为了减少进程2的大小。例如,进程2必须从看门狗调用一个名为"IsSafe"的函数。IsSafe函数依赖于属于Watchdog进程的其他代码,为进程2重写此代码是不可用的。我想到了一些主意,你能告诉我哪个是最好的解决方案,或者给我一些建议吗?

想法一个

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

想法两个

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

想法三

使用windows消息,我真的认为这是行不通的

想法四

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

请告知。

RPC是很久以前发明的。然后是COM。在我看来,最好忘记你的想法,但如果你必须,使用COM。

顺便说一下,要在同一台Windows机器上不使用COM的进程之间进行通信,请使用邮件槽。

似乎你把他们忘在你的名单里了。

干杯,hth。

虽然将代码放在需要调用它的进程中通常是一个好建议,但在看门狗(也包括调试器和任何其他形式的错误处理程序)的特殊情况下,使用单独的进程是正确的。您不希望看门狗由于主代码中的错误而失败,因此它需要是一个单独的进程。

在这种情况下,命名管道是理想的,TransactNamedPipe函数就是为此而设计的。

DLL是idea 4的标准实现。它在两个地址空间中加载,但在物理RAM中共享。你不需要特别的技巧;它可以在任何地方工作,Windows将为你处理任何安全问题。

它也可以移植到大多数其他操作系统,尽管它们通常被称为其他东西,例如Linux上的so。

您真正需要的是一些IPC。对于轻量级和简单的解决方案,只需使用WM_APP定义一个特定于应用程序的消息,并从wParam/lParam中映射参数。如果您发现您需要超过8个字节,您可以使用WM_COPYDATA代替。