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 に存在する場合があります)。

この理由の 1 つは、複数のプロセスが同じ DLL を同時に使用できることです。2 つのプロセスが実行されていて、どちらも を使用していてChild.dll、メッセージをメッセージに送信したい場合Child.dll、どのプロセスがそのメッセージを取得する必要がありますか? 2 つのプロセスが同じ DLL を使用している場合でも、2 つのプロセスが互いに完全に独立しているため、まったく意味がありません。したがって、DLL と対話することはできません。むしろ、プロセスと対話します。

于 2013-02-27T05:25:09.110 に答える