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

dar*_*mos 5 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应用程序的情况下捕获这些消息?(它甚至可能吗?)

dar*_*mos 5

好吧,我做到了.这是如何做:

  1. 创建一个继承自CWnd的类
  2. 声明关联所需消息及其处理程序的消息映射
  3. 在创建Window时,使用CreateEx函数(我在我的类的构造函数中完成),并在最后一个参数中传递HWND_MESSAGE标志.这将创建窗口作为"消息窗口",即不可见.
  4. 一旦我完成了窗口和MFC dll的初始化,我就在隐藏的窗口上,在一个单独的线程中调用RunModalLoop,因为它正在阻塞.这会启动消息泵,并开始接收MFC dll的消息.

编辑:我终于可以使用Win32 API完成它.这是我的故事,代码包括: Programate Algo Blog.别担心,这是英文的.