Изменение CFrameWnd на CFrameWndEx в MFC вызывает необработанное исключение - есть идеи?

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

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

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

Ваше здоровье.


person Monobounce    schedule 14.09.2010    source источник


Ответы (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 функции своего класса приложения.

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

person ChrisN    schedule 14.09.2010
comment
Ваше паучье чутье точно настроено - именно в этом и заключалась проблема, после установки ключа реестра он работает. До сих пор не уверен, почему это стало проблемой только после изменения CFrameWnd на CFrameWndEx, но я вполне счастлив, что мне не пришлось копаться в этой причине. Большое спасибо! - person Monobounce; 15.09.2010
comment
Это хороший проект на github. В шаге 4 «Замена базового класса» упоминается, что SetRegistryKey() следует добавить при обновлении до Ex классов ... github.com/MicrosoftDocs/cpp-docs/blob/master/docs/mfc/ - person u8it; 22.02.2018