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


Автор: DigitSphinx 20.9.2007, 16:35
Искал на форуме ничего полезного по проблеме не нашел (может плохо искал  smile )
Код функции
Код

LOGFONT lf;
CFont font;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = 20;
CFontDialog dlg(&lf);
if (dlg.DoModal())
{
      memcpy(&lf, &dlg.m_lf, sizeof(LOGFONT));
      font.CreateFontIndirect(&lf); 
}

получаю
Цитата

Run-Time Check Failure #2 - Stack around the variable 'dlg' was corrupted.

В чем проблема ?

Автор: zkv 20.9.2007, 17:37
ничего преступного в твоем коде не нашел. 
У меня он работает нормально.

Добавлено через 15 секунд
Попробуй ребилд сделать.

Автор: DigitSphinx 20.9.2007, 17:39
Вот на этом тоже вылетает !!!!
Код

CFontDialog dlg;
dlg.DoModal();

 smile  smile

Добавлено через 37 секунд
Перепробовал 100 вариантов  smile  smile  smile

Добавлено через 1 минуту и 54 секунды
Другие диалоги работают нормально !

Автор: zkv 20.9.2007, 17:42
Цитата(DigitSphinx @  20.9.2007,  17:39 Найти цитируемый пост)
Вот на этом тоже вылетает !!!!

думаю медицина здесь бессильна... Создай новый проект, попробуй в нем.

Автор: DigitSphinx 20.9.2007, 17:50
Нет все равно не работает.
Код

CFont font;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
CFontDialog dlg(&lf);
if (dlg.DoModal())
{
    dlg.GetCurrentFont(&lf);
    font.CreateFontIndirectW(&lf);
}

После выбора шрифта вылетает, как впрочем я и боялся.

Автор: Greeen 20.9.2007, 21:55
DigitSphinx, все прекрасно работает (VS2005)

Автор: DigitSphinx 20.9.2007, 21:59
Да по ходу проблема где-то в другом месте, я пытаюсь найти но без успешно !
 smile

Добавлено через 11 минут и 50 секунд
После объявления CFontDialog dlg;
Указатель this становится равным нулю , а в следующем коде прога вылетает не по выходу из функции а на втором Invalidate(0);
Код

Invalidate(0);
CFontDialog dlgFont;
Invalidate(0);
if (dlgFont.DoModal()==IDOK)
{
    LOGFONT lp;
    dlgFont.GetCurrentFont(&lp);
    CFont cf;
    cf.CreateFontIndirect(&lp);  
}

Автор: DigitSphinx 20.9.2007, 22:22
Прикрепил проект , буду очень признателен если кто поможет.
P.S. это Лаба по комп. графике .

Автор: Greeen 20.9.2007, 23:19
Че то ты как то криво приаттачил файлик.

Автор: DigitSphinx 21.9.2007, 00:32
Это весь проект , проблема в файле “Nadra_L1Dlg.cpp” после брейкпойнта начинается
Кстати VS 2005.

Автор: Greeen 21.9.2007, 01:04
Не поверишь, у меня нормально скомпилился и ни разу не вылетел. Последовательность действий - запустил с дебагом, нажал кнопку Font, поменял шрифт и нажал OK.

Автор: zkv 21.9.2007, 09:00
Цитата(Greeen @  21.9.2007,  01:04 Найти цитируемый пост)
Не поверишь, у меня нормально скомпилился и ни разу не вылетел.

тоже самое.

Автор: DigitSphinx 21.9.2007, 13:23
Думал может проблема с жестким диском, Scandisk показал что все ОК
А может проблема вообще в проге где-то в другом месте , вставил кусок кода в OnInitDialog все равно вылетает run-time error .
Понятие не имею в чем проблема .
все равно спасибо вам ребята !!!

Автор: Ln78 21.9.2007, 17:03
DigitSphinx, а ты всё время с одним и тем же проектом пробовал? Если то же самое, что ты сюда разместил, скопировать в другое место, и оттранслировать такой же эффект? Мне кажется, по крайней мере в прежних версиях VS я с этим встречался, когда непонятно какой-то сбой где-то то ли в *.suo, то ли в *.ncb сохраняется, если их удалить, ошибка пропадает. А с твоим проектом: присоединяюсь к уже отписавшимся, по всякому вызывал диалог, тестировал, никаких неожиданносей не было. Да оно и в коде никакого криминала не видно.

Автор: DigitSphinx 21.9.2007, 17:42
Ln78, я создал новый проект вставил туда 

Код

CFontDialog dlgFont;
if (dlgFont.DoModal()==IDOK)
{
    LOGFONT lp;
    dlgFont.GetCurrentFont(&lp);
    CFont cf;
    cf.CreateFontIndirect(&lp);  

}


Ошибка такая же.
Основной проект почистил и перенес на другой диск – все равно ошибка.
Переустановил студию – все равно ошибка.
Перенес на другой комп – ошибка.
Ошибок вылазеет 3
1. 
Цитата

“Unhandled exception at 0x00000000 in Nadra_L1.exe: 0xC0000005: Access violation reading location 0x00000000.”

Поскольку (почему-то) CWND основного окна становится NULL.
2.
Цитата

 Run-Time Check Failure #2 - Stack around the variable 'dlg' was corrupted.

dlg у меня это CFontDialog dlg
3. 
Цитата

Run-Time Check Failure #2 - Stack around the variable ‘lf' was corrupted.

lf это LOGFONT lf
и вот каждый раз VS меня радует одним из них.
Послал знакомому , он откомпилил ВСЕ В ПОРЯДКЕ.
zkv и greeen говорят что у них тоже все работает.
Может я не так компилю ?!  smile  я нажимаю F5.


Автор: DigitSphinx 22.9.2007, 14:33
Я скомпилировал с Multi-Byte и все заработало.
Exe’шник который был откомпилин на другой машине с Unicod’ом работает.
Т.е. проблема с VS.

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