【发布时间】:2010-10-30 10:40:55
【问题描述】:
是否可以在调用 LoadLibrary() 时静默捕捉诸如“过程入口点 xxx 无法位于动态链接库 xxx 中”之类的错误弹出窗口?
【问题讨论】:
标签: winapi
是否可以在调用 LoadLibrary() 时静默捕捉诸如“过程入口点 xxx 无法位于动态链接库 xxx 中”之类的错误弹出窗口?
【问题讨论】:
标签: winapi
您可以通过调用SetErrorMode() 来抑制错误弹出:
// GetErrorMode() only exists on Vista and higher,
// call SetErrorMode() twice to achieve the same effect.
UINT oldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
SetErrorMode(oldErrorMode | SEM_FAILCRITICALERRORS);
HMODULE library = LoadLibrary("YourLibrary.dll");
// Restore previous error mode.
SetErrorMode(oldErrorMode);
不过,对LoadLibrary() 的调用仍然会失败。
【讨论】:
SetErrorMode(SEM_FAILCRITICALERRORS),因此即使是很短的时间,重置错误模式也会有问题。请记住,SetErrorMode() 是进程范围的。 SetThreadErrorMode() 是线程范围的,但仅在 Windows 7 / Server 2008 R2 及更高版本上受支持。