【问题标题】:Silently catch windows error popups when calling LoadLibrary()调用 LoadLibrary() 时静默捕捉 windows 错误弹出窗口
【发布时间】:2010-10-30 10:40:55
【问题描述】:

是否可以在调用 LoadLibrary() 时静默捕捉诸如“过程入口点 xxx 无法位于动态链接库 xxx 中”之类的错误弹出窗口?

【问题讨论】:

    标签: winapi


    【解决方案1】:

    您可以通过调用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() 的调用仍然会失败。

    【讨论】:

    • 也许第一个调用可能是 oldErrorMode = SetErrorMode(0) ?
    • 这值得商榷 :) 另一个线程可能调用了SetErrorMode(SEM_FAILCRITICALERRORS),因此即使是很短的时间,重置错误模式也会有问题。请记住,SetErrorMode() 是进程范围的。 SetThreadErrorMode() 是线程范围的,但仅在 Windows 7 / Server 2008 R2 及更高版本上受支持。
    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多