【问题标题】:Is it safe to set SEM_FAILCRITICALERRORS on startup with VCL?使用 VCL 在启动时设置 SEM_FAILCRITICALERRORS 是否安全?
【发布时间】:2013-05-13 18:55:39
【问题描述】:

我发现建议在应用启动时调用SetErrorMode(SEM_FAILCRITICALERRORS)
https://docs.microsoft.com/en-us/windows/win32/api/errhandlingapi/nf-errhandlingapi-seterrormode

我知道 VCL 代码在某些函数中临时设置了此模式。但它不会在应用程序启动时全局执行此操作。

由于我没有看到默认行为的任何优势,我正在考虑从我的代码中明确设置它。我只是想知道,VCL 是否设计为在这种模式下运行。有人知道任何潜在的问题吗?什么原因,为什么VCL自己不设置这个模式?

【问题讨论】:

  • 如果 SetErrorMode(SEM_FAILCRITICALERRORS) 是所有应用程序的推荐行为,那么微软应该将其设为所有新进程的默认值,而不是要求应用程序开发人员明确调用它,恕我直言。

标签: delphi winapi c++builder vcl


【解决方案1】:

在 VCL 应用程序中遵循 MSDN 建议并在启动时设置 SEM_FAILCRITICALERRORS 非常好。

【讨论】:

  • 我创建了两个测试项目,一个是包,另一个是exe。我使用运行时包导航到 exe 的项目选项/包/构建,输入库的名称并构建 bpl,然后是 exe。然后我去 bpl 的源并删除了其中一个方法,重建 bpl,运行 exe,它打开了错误对话框。然后在 exe 项目中,我确实查看了源代码并在 Application Initialize 方法调用之前写了SetErrorMode(SEM_FAILCRITICALERRORS)。它仍然显示消息框。我应该在哪里写才能手动处理错误?
  • 你看到了什么消息框?
  • 过程入口点@Libtest@TLibTest@TestMissingProcedure$qqrv在动态链接库LoadedLibrary.bpl中找不到。
  • 这是 Delphi 运行时引发的错误,因此不受 SEM_FAILCRITICALERRORS 错误模式的影响。
  • 也许 delphi 运行时调用 loadpackage 调用 loadlibrary 所以如果我可以在 delphi 运行时之前调用 seterrormode 是否可以阻止对话框?
猜你喜欢
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多