Информация об изменениях

Сообщение Re: Перестал компилироваться проект от 24.10.2017 13:54

Изменено 24.10.2017 14:04 Evgeniy Skvortsov

Re: Перестал компилироваться проект
Здравствуйте, sushko, Вы писали:

S>Что я мог сломать в VS?


У меня такое ощущение, что сломалось что-то в MFC, так как падает такой простейший код:
    CMFCApplication1Dlg *dlg = new CMFCApplication1Dlg();
    dlg->Create(IDD_MFCAPPLICATION1_DIALOG);

    m_pMainWnd = dlg;
    INT_PTR nResponse = dlg->DoModal();


При чем если заменить динамическое создание диалога на:
    CMFCApplication1Dlg dlg;

    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();


То всё прекрасно работает.

Почему падает, я так и не понял, прошелся отладчиком внутрь DoModal(), там вызывается PreModal()
и первой строкой этой функции стоит ASSERT(m_hWnd == NULL), на ней и падает. В чем причина — мне пока неясно.
Re: Перестал компилироваться проект
Здравствуйте, sushko, Вы писали:

S>Что я мог сломать в VS?


У меня такое ощущение, что сломалось что-то в MFC, так как падает такой простейший код:
    CMFCApplication1Dlg *dlg = new CMFCApplication1Dlg();
    dlg->Create(IDD_MFCAPPLICATION1_DIALOG);

    m_pMainWnd = dlg;
    INT_PTR nResponse = dlg->DoModal();


При чем если заменить динамическое создание диалога на:
    CMFCApplication1Dlg dlg;

    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();


То всё прекрасно работает.

Почему падает, я так и не понял, прошелся отладчиком внутрь DoModal(), там вызывается PreModal()
и первой строкой этой функции стоит ASSERT(m_hWnd == NULL), на ней и падает. В чем причина — мне пока неясно.

Добавлено:

В общем как оказалось не нужно вызывать Create(), он теперь автоматов зовется из конструктора.
ТО есть меняем код на:

    CMFCApplication1Dlg *dlg = new CMFCApplication1Dlg();
    INT_PTR nResponse = dlg->DoModal();


И все прекрасно работает.