调用LoadLibrary()时默默捕获Windows错误弹出窗口

Fra*_*ger 4 winapi

是否有可能在调用LoadLibrary()时静默捕获错误弹出窗口,例如"过程入口点xxx无法位于动态链接库xxx中"?

Fré*_*idi 10

您可以通过调用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);
Run Code Online (Sandbox Code Playgroud)

但是,对LoadLibrary()的调用仍将失败.

  • 这是有争议的:)另一个线程可能会调用`SetErrorMode(SEM_FAILCRITICALERRORS)`,因此即使在很短的时间内重置错误模式也会有问题.请记住,`SetErrorMode()`是进程范围的.[SetThreadErrorMode()](http://msdn.microsoft.com/en-us/library/dd553630%28v=VS.85%29.aspx)是线程范围的,但它仅在Windows 7/Server 2008 R2上受支持更高. (3认同)