在某些情况下,我想调用RaiseException()
在传递给Win32函数的回调中引发异常。
举个例子,我想在LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM)
中调用RaiseException()
并在调用堆栈的更远的__try { } __except() { }
块中处理它。
这是否“安全”,因为它在x86和amd64上会产生可预测的结果?从某种意义上它是否“安全”,它不会泄漏资源†?
†:假设我控制的任何中间堆栈帧都以不会泄漏资源的方式设置。我只关心对我来说“不透明”的Win32 API堆栈帧。
答案 0 :(得分:0)
根据我的经验,当您依赖于第一个(也是唯一的)异常处理程序时,任意提出SEH异常是不安全的。有许多机制可以首先拦截您的异常 - 例如,任何充当调试器的东西 - 并采取您不期望的行动。
这看起来像代码味道 - 是否有其他方法来构建代码以避免这种情况?你能用一个(不那么邪恶的)转到吗?