CreateEx导致未处理的异常被停用的激活上下文不是最近激活的激活上下文

时间:2011-10-05 09:22:28

标签: c++ exception mfc activation-context-api

itsAnalysisDataTable.CreateEx( WS_EX_CLIENTEDGE, AfxRegisterWndClass( CS_DBLCLKS, LoadCursor( NULL, IDC_ARROW ), (HBRUSH)::GetStockObject( NULL_BRUSH ), NULL ), "AnalysiysTable", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, dialogItemRect, this, IDC_ANALYSIS_DATA_TABLE );

这条线花了我两天的努力而没有解决方案。 itsAnalysisDataTable是一个自定义窗口控件,CWnd作为其盛大的盛大父级。该控件已成功用于其他步骤,而我们的代码中没有任何问题。 这个是一个CPropertyPage。

我遇到的问题是线路原因(每次都是这样)a     MyProduct(x64)中0x76f7fd5c处的未处理异常.exe:0xC015000F:被激活的激活上下文不是最近激活的激活上下文。

异常也发生在32位中。我在Windows 7 x64,VS 2008上。

我已经尝试过:

  1. 在调试器中启用win32异常中断。没有异常发生(除了我们的代码中有很多并且没有效果的第一次机会异常)
  2. 重新编译整个项目
  3. 调试用于异常控件的OnCreate处理程序。
  4. 调用堆栈:

    ntdll.dll!0000000076f7fd5c()    
    [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
    kernel32.dll!0000000076df42d3()     
    mfc90d.dll!AfxDeactivateActCtx(unsigned long dwFlags=0, unsigned __int64 ulCookie=2077018657900210161)  Line 260 + 0x19 bytes   C++
    

    观察:

    1. 如果我跳过WS_CHILD标志,则不会发生异常,但也不会在控件上调用OnCreate!
    2. 如果我忽略异常并继续,应用程序工作正常,控件也可以正常工作。
    3. 在app init期间调用AfxSetAmbientActCtx(FALSE)会抑制异常。但我认为这是一个黑客行为,除非我能证明这一点。

5 个答案:

答案 0 :(得分:11)

在点击了很多这些后,我发现追踪根问题的简单方法是转到Debug - >例外并启用所有引发异常。然后你会发现有一些其他异常正在触发,被静默捕获,但是搞乱了激活上下文。修复第一个异常后,将不会发生激活上下文异常。

答案 1 :(得分:6)

原来我的是由于违规控制类中未初始化的成员。在构造函数中初始化变量修复了问题。所以我不必诉诸于AfxSetAmbientActCtx(FALSE)

答案 2 :(得分:3)

  

在app init期间调用AfxSetAmbientActCtx(FALSE)会抑制   例外。但我认为这是一个黑客攻击,除非我能证明这一点。

discussion on MS Connect 'MFC default exception handling causes problems with activation context'可能会帮助您证明黑客是微软的解决方案建议。

答案 3 :(得分:0)

有同样的问题。

在我的情况下,我正在从路径中读取文件,我不小心删除了该文件。放回文件解决了这个问题。

答案 4 :(得分:0)

在一个托管IE的程序中有一些神秘的崩溃以及几个ActiveX控件。

将之前的除法变为零(通过其中一个AX控件)最终导致此异常以及后续的访问冲突。