如何从C ++ DLL中使用WndProc?

时间:2009-08-15 13:43:37

标签: c++ dll sapi wndproc

我想从DLL处理一些SAPI消息,这是一种插件。如何处理VC ++ DLL中的消息/事件。 SAPI事件处理显示在以下示例中: http://msdn.microsoft.com/en-us/library/ms720165%28VS.85%29.aspx

3 个答案:

答案 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创建一个单独的线程来创建窗口并等待消息,而实际的函数将控制权返回给进程。