捕获由纯C ++ DLL中的MFC应用程序生成的Windows消息

时间:2011-05-16 19:05:44

标签: c++ windows dll mfc messages

首先:这甚至可能吗?

我有第三方dll可以连接某些硬件。它是用MFC编写的。我收到(来自dll供应商)一个示例Visual Studio 2010解决方案,该解决方案只有一个项目:一个MFC应用程序(.exe)调用有问题的第三方dll。它工作正常。

当我尝试使用我的dll中的第三方dll(这是普通的C ++,没有MFC,没有.NET)时,我可以调用它的函数,但是有一个问题:示例MFC应用程序似乎“覆盖” MessageProc以捕获第三方dll生成的某些消息。尽管dll有一个名为“RegisterFuncCallback”的函数并且我使用它,但我的回调永远不会被调用。

所以这就是问题:如何在不创建MFC应用程序的情况下捕获这些消息? (它甚至可能吗?)

2 个答案:

答案 0 :(得分:5)

好吧,我做到了。方法如下:

  1. 创建一个继承自CWnd
  2. 的类
  3. 声明关联所需消息及其处理程序的消息映射
  4. 创建Window时,使用CreateEx函数(我在类的构造函数中完成),并在最后一个参数中传递HWND_MESSAGE标志。这会将窗口创建为“消息窗口”,即不可见。
  5. 一旦我完成了窗口和MFC dll的初始化,我就在隐藏的窗口上,在一个单独的线程中调用RunModalLoop,因为它正在阻塞。这会启动消息泵,并开始接收MFC dll的消息。
  6. 编辑:我终于可以使用Win32 API完成。这是我的故事,代码包括: Programate Algo Blog。别担心,它是英文的。

答案 1 :(得分:3)

如果DLL与Win32消息一起使用,您将无法绕过它们。但是你不需要MFC,一个简单的WinAPI解决方案就足够了。 MFC只包装Win32 API。如果这些消息不是Win32消息,则不需要Win32应用程序。