CreateEx вызывает необработанное исключение отключаемый контекст активации не является самым последним активированным
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 в качестве его Grand grand grand parent. Элемент управления успешно использовался в других шагах без проблем в нашем коде. этой является CPropertyPage.
проблема, которую я имею, - это причина линии (и она делает это каждый раз) Необработанное исключение в 0x76f7fd5c в MyProduct (x64).exe: 0xC015000F: контекст активации деактивируется не самый последний активированный.
исключение также происходит в 32-битном. Я нахожусь в Windows 7 x64, против 2008.
что я уже пробовал:
- включение break для исключений 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) во время инициализации приложения подавляет исключение. Но я думаю, что это хак, Если я не могу оправдать он.
5 ответов
после нажатия многих из них я нашел простой способ отследить корневую проблему, чтобы перейти к Debug - > Exceptions и включить все брошенные исключения. Затем вы обнаружите, что есть какое-то другое исключение, которое срабатывает, молча ловится, но портит контекст активации. Как только вы исправите первое исключение, исключение контекста активации не произойдет.
оказывается, мой был из-за неинициализированного члена в оскорбительном классе управления. Инициализация переменной в конструкторе исправила проблему. Поэтому мне не пришлось прибегать к AfxSetAmbientActCtx (FALSE)
вызов AfxSetAmbientActCtx (FALSE) во время инициализации приложения подавляет исключение. Но я думаю, что это хак, Если я не могу это оправдать.
на обсуждение MS Connect "обработка исключений по умолчанию MFC вызывает проблемы с контекстом активации" может помочь вам оправдать взлом, являющийся обходным решением от Microsoft.
была та же проблема.
в моем случае я читал файл из Пути, и я случайно удалил этот файл. Возвращение файла решило проблему.
были некоторые таинственные сбои в программе, которая размещала IE вместе с несколькими элементами управления ActiveX.
оказывается, более раннее деление на ноль (одним из элементов управления AX) в конечном итоге вызвало это исключение и последующее нарушение доступа.