翻译《The Old New Thing》- How do I suppress the error box that appears when a LoadLibrary fails?

103 篇文章 0 订阅
53 篇文章 2 订阅

How do I suppress the error box that appears when a LoadLibrary fails? - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20240208-00/?p=109374

Raymond Chen 2024年01月31日


如何在 LoadLibrary 失败时禁止显示错误框?

        如果通过 LoadLibrary 或相关函数加载 DLL 时出现问题,有时会出现一个系统错误框,显示“Contoso.dll 未设计为在 Windows 上运行,或者它包含错误。请尝试使用原始安装介质重新安装程序,或联系您的系统管理员或软件供应商寻求支持。”程序如何禁止显示这条错误信息,而只是让 LoadLibrary 静悄悄地返回 NULL 呢?

        所谓的“错误模式”控制了在各种类别的坏事发生时的行为方式。其中一类失败被称为 SEM_FAILCRITICALERRORS。这个名字听起来非常模糊,但在引入它的时候,它并不模糊。

        “关键错误”一词指的是 MS-DOS 中的中断 24h,被称为“关键错误”中断。这些错误包括“驱动器中没有磁盘”或“I/O 错误”,你的恢复选项是著名的三选一:中止、重试和忽略,后来又修改为中止、重试和失败。说你想“失败关键错误”显然意味着当这些关键错误发生时,你不希望系统提示用户采取行动,而是像用户选择了“失败”一样行动。

        Windows 扩大了被归类为“关键错误”的事物类别,以包括“找不到 DLL”,以便用户可以重新插入包含丢失 DLL 的软盘。在接下来的几十年里,各种其他杂项文件错误也被扔进了“关键错误”的筐里。(听起来熟悉吗?)

        这就引出了问题的答案。

        要禁止像 LoadLibrary 这样的函数中的错误对话框,你可以调用

SetErrorMode(SEM_FAILCRITICALERRORS) ¹

        更准确地说,你想将 SEM_FAILCRITICALERRORS 标志添加到已经设置的任何标志中。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0x0007

可不可奖励我吃只毛嘴鸡 馋😋

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值