Изменение CFrameWnd на CFrameWndEx в MFC вызывает необработанное исключение - есть идеи? - PullRequest
3 голосов
/ 14 сентября 2010

Все еще привыкаю к ​​этому жаворонку МФЦ, и я столкнулся с кирпичной стеной по этой конкретной проблеме.Я обновляю устаревший код, чтобы использовать некоторые из более совершенных элементов управления, доступных в пакете MFC Feature Pack.

Следуя приведенным в сети примерам для обновления старого приложения MFC, изменение базового класса приложения на CWinAppEx работает нормально, но когда я меняю CFrameWnd на CFrameWndEx, я получаю сообщение об ошибке Debug Assert Failed, которое приходит откуда-то из mfc90d.dll! AFXGetRegPath.Игнорирование этого сообщения приводит к потере 0xC0000005: ошибки нарушения доступа.

Буду благодарен за любые предложения о том, как исправить это.

Приветствия.

1 Ответ

4 голосов
/ 15 сентября 2010

Исходный код для инфраструктуры MFC включен как часть Visual Studio, поэтому он должен быть установлен на вашем компьютере.В общем, когда среда запускает отладочное утверждение, вы должны зайти в отладчик, и это поможет вам определить точную причину проблемы.

Глядя на исходный код, я вижу, что функция AFXGetRegPathсодержит несколько утверждений:

ENSURE(lpszPostFix != NULL);
ASSERT_VALID(pApp);
ENSURE(AfxGetApp()->m_pszRegistryKey != NULL);
ENSURE(AfxGetApp()->m_pszProfileName != NULL);

Если бы мне пришлось угадывать, я бы сказал, что проверка m_pszRegistryKey не удалась, возможно, потому что вы не вызываете SetRegistryKey в InitInstance класса вашего приложения.функция.

Надеюсь, это поможет!

...