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 в качестве своего великого великого прародителя.Элемент управления успешно использовался в других условиях без проблем в нашем коде. this является CPropertyPage.
У меня проблема в том, что строка вызывает (и делает это каждый раз) необработанное исключение в 0x76f7fd5c в MyProduct (x64) .exe: 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 также не вызывается дляcontrol!
- Если я игнорирую исключение и продолжаю, приложение работает нормально, элемент управления также работает нормально.
- Вызов AfxSetAmbientActCtx (FALSE) во время инициализации приложения исключает исключение.Но я думаю, что это взлом, если я не смогу оправдать это.