2011-06-21 10 views
0

「入力」を待つためにDLL関数を作成する方法やDLLエクスポートの特定のインスタンスを呼び出す方法については、誰も知りませんか?EXEによってトリガされるまでDLLエクスポートを一時停止


私はWindowsサービスをDLLに変換しようとしています。起動情報を記録し、終了するまで待つ機能を持っています。ロギング機能は有効ですが、私は2つの問題を把握する必要があります。

  1. それはその主な機能を実行した後、輸出は(古典Press any key to continue…のように、しかしマイナスインタフェース)が座って待つ必要がある
  2. 私は実行可能ファイルを持つことの方法が必要ですその後、それはだと一時停止したインスタンスを伝えます第一の問題について

を終了する時は、私がループに入ると、トリガのいくつかの並べ替えを待っていると考えられるが、もちろん、それは100%の-CPUサイクルに入るべきではない、ので、多分WaitForSingleObjectまたは多分待っていますメッセージ(例えば、WM_APP)。

私は何らかのプロセス間通信を考えましたが、共有メモリーやセマフォーのように乱雑ではないことを願っていました(私はUnixではUnixでは共有mem、セマフォー、シグナルなどを使用しましたがこれはWindows上にあります)。もちろん、呼び出されるエクスポートの特定のインスタンスにアクセスする方法が必要です。

答えて

1

CreateEvent、SetEvent、およびWaitForSingleObjectを使用できます。 dllが実行可能ファイルによってロードされていて、必要なすべてのイベントを通知する必要がある場合。別の実行可能ファイルからのものであれば、わずかに複雑です。 CreateEventを呼び出すと、名前付きイベントを作成します。この名前付きイベントには、複数のプロセスからアクセスできます。ログインしている別のユーザー間で作業する必要がある場合は、その名前の前に「Global \」を付けると、すべてのユーザーのすべてのプロセスで同じイベントになります。

//in dll 
HANDLE eventHandle = CreateEvent(NULL, TRUE, FALSE, "Global\\My-Unique-Trigger-Event"); 
//do stuff 
WaitForSingleObject(eventHandle, INFINITE); 
//exit 

//in executable 
HANDLE eventHandle = CreateEvent(NULL, TRUE, FALSE, "Global\\My-Unique-Trigger-Event"); 
SetEvent(eventHandle); 
+0

有望なサウンド。 DLLは実際には別のプロセス(OS)から呼び出され、後で別のEXEで終了するように指示する必要があります。 – Synetech

+0

私は 'OpenEvent(EVENT_MODIFY_STATE ...'を 'CreateEvent'ではなくEXEで使っていましたが)' rundll32'でテストしましたが、両方のパーツが動作しているように見えます。期待どおりに動作することを確認してください。 – Synetech

関連する問題