簡體   English   中英

在回調中引發RaiseException(...)Win32 seh異常安全嗎? (在x86和x64上)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM