暂停DLL导出,直到由EXE触发

时间:2011-06-21 15:28:00

标签: dll inter-process-communicat pausing-execution

有没有人知道如何使DLL函数等待“输入”,以及如何调用DLL导出的特定实例?


我正在尝试将Windows服务转换为DLL。它包含一个记录一些启动信息的功能,然后等到被告知要退出。记录功能已经解决,但我需要弄清楚两个问题。

  1. 执行主要功能后,导出需要等待(如经典Press any key to continue…,但减去界面)
  2. 我需要一种方法让一个可执行文件随后告诉暂停的实例它是时候退出了
  3. 对于第一个问题,我考虑进入循环并等待某种触发器,但当然它不应该进入100%-CPU周期,所以可能WaitForSingleObject或者可能正在等待消息(例如WM_APP)。

    对于第二种,我想到了某种进程间通信,但希望不要像共享内存或信号量那样混乱(我在unix中使用了un-mem中的shared-mem,信号量,信号等,但是这个在Windows上)。当然,我需要一种方法来访问被调用导出的特定实例。

1 个答案:

答案 0 :(得分:1)

您可以使用CreateEvent,SetEvent和WaitForSingleObject。如果dll由可执行文件加载,需要发出所需信息。如果它来自单独的可执行文件,则只会稍微复杂一些。调用CreateEvent时,请创建一个命名的Event。可以通过多个进程访问此命名事件。如果它需要在登录的不同用户之间工作,请在名称前加上“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 );