2

DLL 和可执行文件是否可以从不同的进程进行通信?

例如:

Child.dll is loaded into Target.exe...
Owner.exe is running...
Owner.exe sent message "close" to Child.dll
Child.dll received message "close" from Owner.exe
Child.dll executed: ExitProcess( 0 );
Target.exe has exited, therefore Child.dll has already been unloaded.

那么,有可能吗?如果是这样,怎么做?谢谢。

4

2 回答 2

2

DLL 不在单独的进程中运行,它在调用某些方法或访问 DLL 中包含的数据的进程的进程空间中运行。

因此,如果不存在使用 DLL 的进程,操作系统可能决定将映射为 DLL 的内存页面交换到 SWAP 空间,甚至完全从内存中卸载 DLL。

于 2013-02-27T05:21:24.073 回答
1

这可以通过“进程间通信”来实现。请注意,使用 IPC,您不会向 DLL 发送消息,而是将其发送给其他进程。因此,如果进程 A 想告诉进程 B 一条消息,它就会这样做(使用他们为通信建立的任何手段,如套接字、共享内存、命名管道等)。IPC 代码可能存在于 DLL 中。

请注意,您不能像您在问题中概述的那样单独与 DLL 对话。您必须与进程交谈(但同样,处理进程通信的代码可能存在于不同的 DLL 中)。

原因之一是多个进程可以同时使用同一个 DLL。如果您有两个进程正在运行,它们都使用Child.dll,并且您想将消息发送到Child.dll消息,那么应该由哪个进程获取该消息?这不太有意义,因为这两个进程完全相互独立,即使它们都使用相同的 DLL。因此,您不能单独与 DLL 对话;相反,你与一个过程交谈。

于 2013-02-27T05:25:09.110 回答