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

Can I override a globally defined API in a C++/MFC project?

本文关键字:定义 全局 API 项目 覆盖 C++ MFC 我可以      更新时间:2023-10-16

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

PS。我不需要全局挂钩。这只需要从我的应用程序代码中运行。例如,如果代码中有::MessageBox(...);,它应该允许我调用自己的方法,而不是链接到系统API。

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

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

如果你有第三方二进制文件或其他不编译代码的东西,这当然不会起作用。

如果使用MFC,则可以覆盖CWinApp::DoMessageBox函数。