gpt4 book ai didi

c - 在回调中 RaiseException(...) win32 seh 异常是否安全? (在 x86 和 x64 上)

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:41 25 4
gpt4 key购买 nike

在某些情况下,我想调用 RaiseException()在传递给 Win32 函数的回调中引发异常。

举个例子,我想在 LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM) 中调用 RaiseException()并在 __try { } __except() { } block 中处理它,调用堆栈更靠下。

从它在 x86 和 amd64 上产生可预测结果的意义上说,这是“安全的”吗?从不会泄漏资源的意义上说,它是否“安全”†?

†: 假设我控制的任何中间堆栈帧都以不会泄漏资源的方式设置。我只关心对我来说“不透明”的 Win32 API 堆栈帧。

最佳答案

根据我的经验,当您依赖成为第一个(也是唯一的)异常处理程序时,任意引发 SEH 异常是不安全的。有许多机制可以首先拦截您的异常 - 例如任何充当调试器的东西 - 并采取您不期望的行动。

这似乎是一种代码味道 - 是否没有其他方法来构建您的代码来避免这种情况?您可以只使用(不那么邪恶的)goto 吗?

关于c - 在回调中 RaiseException(...) win32 seh 异常是否安全? (在 x86 和 x64 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25316758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com