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

时间:2013-02-27 05:15:11

标签: c++

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.

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

请注意,您无法自行与DLL对话,就像您在问题中所述。您必须与流程进行通信(但同样,处理流程通信的代码可能存在于不同的DLL中)。

这样做的一个原因是多个进程可以同时使用同一个DLL。如果您有两个正在运行的进程,它们都使用Child.dll,并且您想要向Child.dll发送一条消息,哪个进程应该收到该消息?看起来两个进程完全相互独立,即使它们都使用相同的DLL,也没有多大意义。因此,你不能单独与DLL交谈;相反,你谈论一个过程。