Изменение CFrameWnd на CFrameWndEx в MFC вызывает необработанное исключение - есть идеи?
Все еще привыкаю к этому жаворонку МФЦ, и я столкнулся с кирпичной стеной по этой конкретной проблеме. Я обновляю устаревший код, чтобы использовать некоторые из более совершенных элементов управления, доступных в пакете MFC Feature Pack.
Следуя приведенным в Интернете примерам для обновления старого приложения MFC, изменение базового класса приложения на CWinAppEx работает нормально, но когда я изменяю CFrameWnd на CFrameWndEx, я получаю сообщение об ошибке Debug Assert Failed, которое приходит откуда-то из mfc90d.dll!AFXGetRegPath. Игнорирование этого сообщения приводит к повороту 0xC0000005: ошибки нарушения доступа.
Буду признателен за любые предложения о том, как это исправить.
Приветствия.
1 ответ
Исходный код для инфраструктуры MFC включен как часть Visual Studio, поэтому он должен быть установлен на вашем компьютере. В общем, когда среда запускает отладочное утверждение, вы должны зайти в отладчик, и это поможет вам определить точную причину проблемы.
Глядя на исходный код, я вижу, что AFXGetRegPath
Функция содержит несколько утверждений:
ENSURE(lpszPostFix != NULL);
ASSERT_VALID(pApp);
ENSURE(AfxGetApp()->m_pszRegistryKey != NULL);
ENSURE(AfxGetApp()->m_pszProfileName != NULL);
Если бы мне пришлось угадывать, я бы сказал, что это m_pszRegistryKey
проверить, что не удается, вероятно, потому что вы не звоните SetRegistryKey
в классе вашего приложения InitInstance
функция.
Надеюсь, это поможет!