首先:这有可能吗?

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

当我尝试使用自己的dll(纯C++,无MFC,无.NET)中的第三方dll时,可以很好地调用其功能,但是有一个陷阱:M​​FC应用程序示例似乎按顺序“覆盖”了MessageProc捕获第三方dll生成的某些消息。尽管dll具有一个名为“RegisterFuncCallback”的函数,但我使用了它,但从未调用过我的回调函数。

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

最佳答案

好吧,我做到了。就是这样:

  • 创建一个继承自CWnd的类
  • 声明一个将所需消息及其处理程序关联的消息映射
  • 创建Window时,请使用CreateEx函数(我在类的构造函数中完成了此操作),并在最后一个参数中将HWND_MESSAGE标志传递给它。这会将窗口创建为“消息窗口”,即不可见。
  • 完成窗口和MFC dll的初始化后,由于阻塞,我在隐藏的窗口中的另一个线程中调用RunModalLoop。这将启动消息泵,并开始接收MFC dll的消息。

  • 编辑:我终于可以只使用Win32 API来做到这一点。这是我的故事,代码包括:
    Programate Algo Blog。不用担心,它是英文的。

    关于c++ - 在纯C++ dll中捕获由MFC应用程序生成的Windows消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6022087/

    10-09 07:14
    查看更多