【问题标题】:C++ exceptions in VC, without SEHVC 中的 C++ 异常,没有 SEH
【发布时间】:2014-11-14 21:01:13
【问题描述】:

是否可以使用 VC(最好是最新版本之一)并使用未通过 SEH 实现的 C++ 异常?

注意 - 我的意思不是使用 C++ catch 子句 (/Eha \ /Ehsc) 来捕获 SEH 异常,我的意思是使用 C++ 异常而不让 SEH 异常在后台飞来飞去。

【问题讨论】:

  • 我很想知道您的基本目标是什么,以及您所说的“飞来飞去”是什么意思。结构化异常处理可能很复杂,但并不混乱。
  • 改变我的答案,秒。这将是替换运行时的那部分(_CxxThrowException 等)的问题。

标签: c++ visual-studio exception visual-c++ seh


【解决方案1】:

默认情况下,C++ 异常构建在 SEH 之上。

可以更改这一点,但您必须重写大部分运行时,并自己实现帧处理逻辑(读作:大量程序集)。

由于 32 位和 64 位构建(对于 x86)中堆栈帧布局之间的巨大差异,您将无法在它们之间重用大量代码(64 位 EH 还需要挖掘另一个PE 图像的区域)。

也就是说,除非真的真的需要,否则只需像在其他任何地方一样使用异常来确保您的代码尽可能可移植。在大多数情况下,您可以假装 SEH 不存在。

【讨论】:

  • 同意。 SEH 只是 VC 如何为 C++ 异常实现try/catch 的一个私人细节。只需忽略 SEH,除非您确实需要直接处理 SEH 异常,在这种情况下您必须使用 __try/__except 而不是 try/catch
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2012-10-20
相关资源
最近更新 更多