我可以覆盖C ++ / MFC项目中全局定义的API吗?

时间:2013-02-20 23:37:09

标签: c++ winapi visual-studio-2008

我需要确保仅在我的应用程序在交互式桌面上运行时才会显示消息框。所以我在想,我可以用我自己的实现覆盖:: MessageBox和AfxMessageBox(来自用VS 2008编译的C ++ / MFC项目)吗?

PS。我不需要全局钩子。这只需要从我的应用程序代码中工作。例如,如果代码中的某处::MessageBox(...);,我应该让我调用自己的方法,而不是链接到系统API。

2 个答案:

答案 0 :(得分:1)

默认的MessageBox(实际上是MessageBoxA或MessageBoxW)被定义为导出,所以不幸的是,您不能仅定义要链接的本地版本。如果您可以访问使用MessageBox的所有源代码,那么在包含windows.h之后重新定义MessageBox宏很简单:

#include <windows.h>
#undef MessageBox
#define MessageBox MyMessageBox

如果你有第三方二进制文件或者你没有编译代码的东西,那当然不行。

答案 1 :(得分:1)

如果使用MFC,则可以覆盖CWinApp::DoMessageBox功能。