Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > access violation при DoModal диалога


Автор: Тутанхамец 22.9.2006, 14:57
Господа, прошу помощи. В С++ я вообще-то не в зуб ногой, но вот надо делать в нем прогу. 
У меня диалоговое приложение. Я пишу в нажатии кнопки на первом диалоге:

Код

void CPdvDlg::OnButton2Click() 
{
    CSecondDlg md;
    md.DoModal;
            
}



Диалог About, сгенерированный автоматически, именно так вроде выводится. А у меня при нажатии кнопки лезет unhandled exception, access violation. Чё за дела?

Автор: Тутанхамец 22.9.2006, 15:35
Если добавлять новый диалог командой Insert New Form, то всё работает. Уважаемые, а в чем разница? Что надо написать, чтобы мой диалог, добавленный через Insert Resource, нормально DoModal'ился? 
И еще. Куда надо вставить #include "MyDialog.h", чтобы MyDialog был виден из любого модуля?

Автор: Nuzur 22.9.2006, 15:39
Цитата

Куда надо вставить #include "MyDialog.h", чтобы MyDialog был виден из любого модуля? 


stdafx.h
в но после всех рстальных инклудов! Но  я бы тебе советовал вставлять инклуд в каждом модуле где он нужен.

Цитата

Диалог About, сгенерированный автоматически, именно так вроде выводится. А у меня при нажатии кнопки лезет unhandled exception, access violation. Чё за дела?


Ты где-то в другом месте накосячил. А диалог "о программе..." вседа CAboutDlg и он действительно создается автоматически. И показать его

Код

    CAboutDlg dlg;
    dlg.DoModal();


А что у тя такое CSecondDlg я незнаю.

Автор: Тутанхамец 22.9.2006, 15:48
CSecondDlg появился так. Я нажал Inder - Resource, получил диалог, нарисовал контролы на форме и полез в MFC ClassWizard, а он при появлении спросил меня, не хочу ли я создать класс для этого диалога. Пожалуйста, развития моего ради, скажи, как мне отображать полученный таким образом диалог? И чем от него отличается диалог, вставленный через Insert - New Form?

Автор: Pulse69 22.9.2006, 16:30
Если ты создал просто диалог и пытаешься его отобразить, никаких ошибок происходить не должно. Может быть, у тебя есть обработчики в этом классе, которые вызывают ошибки?

Если я правильно тебя понял, то New Form от New Dialog очень сильно отличается.
В MFC проект можно добавить поддержку CLR, к которой относятся такие элементы управления .NET как формы ( такие замиксовки изврат, ИМХО, редкостный ). Если ты пишешь MFC-приложение без поддержки .NET и Managed Extensions ( например, сборки мусора ), эти формы лучше не использовать.

Автор: Тутанхамец 22.9.2006, 16:58
Обработчиков там пока нет вовсе. А по поводу NET - так я в VC 6.0 маюсь. Мне кажется, при создании New Form среда где-то пишет какой-то дополнительный код, который нужен для нормальной работы класса-диалога. А если я создаю диалог вручную, то должен либо юзать API для его отображения, либо лично прописать что-то где-то. Но в генерённом средой коде мне с непривычки разобраться тяжеловато. smile Ладно, пожалуй, буду юзать диалоги через New Form. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)