2011-10-05 22 views
6
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。CreateEx导致未处理的异常被取消激活的上下文不是最近激活的异常

我的问题是线路原因(每一次它的话)在myProduct的(64).EXE在0x76f7fd5c的 未处理的异常:0xC015000F:被停用的激活上下文不是最近激活之一。

32位也发生异常。我在Windows 7 64位,VS 2008

我已经尝试过:

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

调用堆栈:

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. 在应用程序init期间调用AfxSetAmbientActCtx(FALSE)可以抑制异常。但我认为这是一种黑客,除非我能证明这一点。
+1

“激活上下文被停用”症状通常是跨上激活上下文的上游异常的级联症状。也许你遇到的一次偶然例外之一就是这样做的。查看是否可以捕获并处理在“激活上下文”异常发生之前发生的第一次机会异常。 –

+0

调试+例外,勾选投掷框。 –

回答

11

在遇到很多这些问题后,我发现追踪根本问题的简单方法是转到Debug - > Exceptions并启用ALL Thrown例外。然后你会发现还有一些其他的异常被触发,被悄悄地捕获,但搞乱了激活上下文。一旦修复了第一个异常,激活上下文异常就不会发生。

6

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

0

有同样的问题。

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

0

在承载IE和一些ActiveX控件的程序中发生了一些神秘的崩溃。

原来的零除以(最后一个AX控件)最终导致了这个异常以及随后的访问冲突。