Изменение 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 функция.

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

Другие вопросы по тегам