Windows Messaging - 捕获源自另一个API的调用

时间:2010-12-23 09:04:05

标签: c++ dll interop windows-messages

情境:

我们正在忙着将第三方的C ++ SDK作为DLL包装,以使我们组织中的其他开发人员能够更轻松地将此功能集成到他们自己的应用程序中(无论是.net,delphi等)

底层系统发送Windows消息以指示系统中发生的事件。需要处理这些事件,因为它们可能表示系统状态以及接下来可以做什么。

问题:

在我们采用的方法(即包装第三方SDK的DLL)的上下文中处理这些消息的最佳方法是什么?想到的一些想法:

  1. 让使用DLL的应用程序捕获消息,然后通过函数调用将其传递回DLL进行处理 - 调用应用程序甚至可以捕获这些消息吗?
  2. 从DLL中生成一个线程,该线程实现了一个消息泵,它从底层系统处理这些消息并冒出我们自己的自定义消息?
  3. 为SDK提供的所​​有示例代码都使用单个Win32应用程序来实现消息泵,并在应用程序的上下文中处理消息。

    自从我使用原生Win32进行Windows开发以来已经过了很长时间,并希望得到一些建议。

1 个答案:

答案 0 :(得分:2)

最简单的方法是制作代理DLL。基本思想是用您自己的API替换API DLL,替换您想要的函数并将其余函数转发到原始API DLL。您重命名原始DLL并使用API​​ DLL的原始名称。为此,您需要导出功能。 Microsoft使用Visual Studio使这变得相当简单。

以下是导出函数的方法:http://msdn.microsoft.com/en-us/library/z4zxe9k8%28v=VS.100%29.aspx

如果您不知道他们正在使用的API的函数调用,那么有一个名为PE Explorer的实用程序可以告诉您有关这些函数的所有信息。单一营业执照的成本为229美元,但看起来值得花钱:http://pe-explorer.com/peexplorer-tour-function-view.htm

有一些方法可以替换内存中的API调用,但它很复杂,要求API已经处于活动状态(除非您密切监视系统)并且可能会启动防病毒程序。