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
我已经尝试过:
- 启用在调试的win32异常中断。没有发生异常(除了在我们的代码中有很多并且没有影响的第一次机会例外)
- 重新编译整个项目
- 调试异常控件的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++
观察:
- 如果我跳过WS_CHILD标志异常不会发生,但在OnCreate也没有呼吁控制!
- 如果我忽略异常并继续,应用程序工作正常,该控件也可以正常工作。
- 在应用程序init期间调用AfxSetAmbientActCtx(FALSE)可以抑制异常。但我认为这是一种黑客,除非我能证明这一点。
“激活上下文被停用”症状通常是跨上激活上下文的上游异常的级联症状。也许你遇到的一次偶然例外之一就是这样做的。查看是否可以捕获并处理在“激活上下文”异常发生之前发生的第一次机会异常。 –
调试+例外,勾选投掷框。 –