2013-02-20 52 views
0

我需要确保仅当我的应用程序在交互式桌面中运行时才显示消息框。所以我想,我可以重写:: MessageBox和AfxMessageBox与我自己的实现(从一个C + +/MFC项目,用VS 2008编译)?我可以覆盖C++/MFC项目中全局定义的API吗?

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

回答

1

默认的MessageBox(实际上MessageBoxA或MessageBoxW)被定义为一个出口,所以很遗憾你不能只定义一个本地版本先链接英寸如果你有机会到使用MessageBox的所有源很简单,包括WINDOWS.H后虽然重新定义的MessageBox宏:

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

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

+0

他可以在运行时使用trampolines覆盖MessageBox函数。 – sashoalm 2013-02-21 14:22:39

+0

是的,绝对。谢谢。 – ahmd0 2013-02-21 17:36:33