[英]Is it safe to RaiseException(…) a win32 seh exception in a callback? (On both x86 and x64)
在某些情況下,我想調用RaiseException()
在傳遞給Win32函數的回調中引發異常。
作為一個示例,我想在LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM)
調用RaiseException()
,並在更遠的調用堆棧中的__try { } __except() { }
塊中進行處理。
從x86和amd64上可以預期的結果來看,這是“安全的”嗎? 在不泄漏資源的意義上說“安全”嗎?
†: 假設我控制的任何中間堆棧幀都不會泄漏資源。 我只關心對我“不透明”的Win32 API堆棧框架。
以我的經驗,當您依靠成為第一個(也是唯一的)異常處理程序時,任意引發SEH異常是不安全的。 有許多機制可以首先攔截您的異常-例如,任何充當調試器的異常-並采取您不期望的操作。
這似乎是一種代碼氣味-沒有其他方法來構造代碼來避免這種情況? 您能使用(更少邪惡的)goto嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.