1. 程式人生 > >0xC015000F:正被停用的啟用上下文不是最近啟用的

0xC015000F:正被停用的啟用上下文不是最近啟用的

專案程式執行的時候,突然出現這個錯誤,呼叫堆疊中的函式,沒有一個是自己寫的,非常困惑。
  在網上搜索了一下,先找到一個提示,可以在CApp::InitInstance()中禁用ActivationContext:
  afxAmbientActCtx= FALSE;
  這種做法能“解決”問題,但進一步查證後發現這實際上是隱藏問題。
   Junfeng Zhang在自己的部落格中給了比較詳細的解釋(http://blogs.msdn.com/b/junfeng/archive/2006/03/19/sxs-activation-context-activate-and-deactivate.aspx)。基本上出現這個錯誤,是因為在程式碼中拋 出了異常,從而跳過了與Context Activation對應的Deactivation,導致後續呼叫Deactivation時,發現棧中的Context不對。
  而MSDN 論壇中, 網友MMDev在回答別人的帖子(http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/c3feab0f-601b-4ca6-beb2-8d4d615438cc/)時給出了比較好的解決方案:
  在Visual Studio中,選擇Debug | Exceptions選單項,在彈出的對話方塊中,勾選所有的Win32 Exceptions,這樣在Win32的異常丟擲時,程式就會中斷,這樣就有機會在第一時間(異常處理前)看到自己的程式碼中發生了什麼錯誤導致丟擲異常,從而改正錯誤,消除程式中的隱患。