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 是一个自定义的 Windows 控件,以 CWnd 作为它的祖父。该控件已成功用于其他方面,而我们的代码没有问题。这是一个 CPropertyPage。
我遇到的问题是行导致(并且每次都会这样做)MyProduct (x64).exe 中 0x76f7fd5c 处的未处理异常:0xC015000F:被停用的激活上下文不是最近激活的。
异常也发生在 32 位中。我在 Windows 7 x64,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!
- 如果我忽略异常并继续,应用程序工作正常,控件也工作正常。
- 在应用程序初始化期间调用 AfxSetAmbientActCtx(FALSE) 会抑制异常。但我认为这是一个 hack,除非我能证明它是合理的。