我想从DLL处理一些SAPI消息,这是一种插件。如何处理VC ++ DLL中的消息/事件。 SAPI事件处理显示在以下示例中: http://msdn.microsoft.com/en-us/library/ms720165%28VS.85%29.aspx
答案 0 :(得分:5)
要处理“普通”消息,您仍需要一个Window对象。它可以是一个特殊的“仅消息”窗口,仅与普通窗口共享消息队列基础结构。要创建它,首先使用RegisterClass()
注册您的消息处理类。接下来,通过将HWND_MESSAGE
作为父窗口传递给CreateWindow()
来创建消息队列。您将获得HWND,然后返回SAPI。
但是,SAPI也支持其他接口。 ISpNotifySource文档名称4:Windows消息,回调,事件和COM(ISpNotifySink)。要使用回调,只需将您的一个DLL方法的地址传递给SetNotifyCallbackFunction
。
答案 1 :(得分:1)
如果您的代码作为插件运行,您可能希望让SAPI直接使用ISpNotifySource::SetNotifyCallbackFunction而不是ISpNotifySource::SetNotifyWindowMessage给您回电。然后,当事件发生时,SAPI将直接调用您的函数。
答案 2 :(得分:0)
WndProc用于接收指向窗口的所有消息/事件。
您的DLL应该创建一个窗口并等待消息到窗口。如果可能,您应该在主进程中实现它,或者您可以让dll创建一个单独的线程来创建窗口并等待消息,而实际的函数将控制权返回给进程。