【问题标题】:How do I stop a process-killing exception in a DLL?如何停止 DLL 中的进程终止异常?
【发布时间】:2015-04-09 16:21:23
【问题描述】:

我的 C++ 应用程序正在使用为某些外部软件提供 API 的第 3 方 DLL。这里没有其他选择。这是我必须使用的软件、API 和 DLL。

我正在尝试对我的界面进行防弹。当 API 调用出错时,DLL 会立即终止整个进程。我已经将调用包装在 try/catch 中,我正在使用我在其他项目中成功使用的 SEH 翻译类(并且选择了 /EHa),我什至正在处理 std::unexpected。这些都不会被触发。一旦我调用 DLL 函数,该过程就结束了。

我应该考虑哪些其他途径来保护我的流程?我想避免只为这个 API 分离一个子进程。

【问题讨论】:

  • 一开始就阻止它发生?如果记录在某些条件下会发生进程的终止,请确保这些条件永远不会成立。如果没有记录,请联系您的供应商。除此之外,没有任何关于这个 DLL 做什么以及它是如何做的信息,这里的任何人都可以做的就是随机猜测。您的问题中没有足够的信息让任何人都知道可能出了什么问题。
  • 需要在调试器下看看会发生什么。没办法
  • 太宽泛了。这是一个“请推测我没有向您展示的某些代码可能出了什么问题,并列出我可能能够保护自己的方法”问题。这个网站是针对特定问题的,而不是猜测和猜测请求。如果您对第三方 DLL 有疑问,请联系该库的供应商/作者。
  • 正确的解决方案是修复 DLL。如果您不能这样做,请更换它。
  • 违反/GS 可以做到这一点。这里选择的武器是电话,给他们一个像样的复制项目。

标签: c++ winapi dll exception-handling seh


【解决方案1】:

保护自己免受 DLL API 出错的唯一可靠方法是派生一个子进程并让该进程进行 DLL 交互(请参阅 firefox 和插件容器)。例如,如果 DLL 调用 exit,那么您什么都不会捕捉到。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多