Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с MFC

418
21 марта 2002 года
artgonch
54 / / 20.07.2000
Здравствуйте! Обращаюсь к людям, компитентным в вопросах программирования с помощью MFC. У меня такая проблема: при попытке получить указатель на наследника CWnd в обработчике сообщений с помощью метода GetDlgItem() происходит ошибка доступа (Access violation) в библиотеке MFC4X.dll. Но в некоторых других участках кода такие операции выполняются без ошибок. В чем дело? Млжет это происходить из-за компилятора или поврежденной библиотеки?
449
21 марта 2002 года
Fantasist
124 / / 20.06.2000
Такие вещи происходят чаще всего при неинициализированной памяти. Тщательно праверь указатели и hWnd на пример их инициализации. Действительно они то, что ты думаешь, в этом месте.
418
22 марта 2002 года
artgonch
54 / / 20.07.2000
Дело в том, что я не могу получить указатель на объект-потомок CWnd. Ошибка возникает при вызове метода GetDlgItem(). Но я обнаружил интересный момент, который говорит не в пользу Visual C++: при запуске релиз-версии программы ошибки в том месте не возникает, тогда, как при запуске дебаг-версии, она проявляется. Что мне делать? Подскажите, пожалуйста!
449
22 марта 2002 года
Fantasist
124 / / 20.06.2000
Cкинь мне код на мыло, попробуем посмотреть.
475
23 марта 2002 года
Winnie
90 / / 20.03.2000
Цитата:

On 2002-03-22 1922, artgonch wrote
Но я обнаружил интересный момент, который говорит не в пользу Visual C++ при запуске релиз-версии программы ошибки в том месте не возникает, тогда, как при запуске дебаг-версии, она проявляется. Что мне делать? Подскажите, пожалуйста!


Естественно в релизе не проверяются указатели на некорректность - этот момент говорит не в твою пользу... скорее всего элемент который ты хочешь получить уже не существует (если конечно вообще правильный ID указан)

418
24 марта 2002 года
artgonch
54 / / 20.07.2000
Почему это должно говорить не в мою пользу? Ведь в релиз-версии элементы управления, на которые я получаю указатели, работают нориально! Ошибка возникает, когда я пытаюсь получить указатель на элемент управления. Я выяснил еще кое-что: оказывается, что функция ΑΣΣΕΡΤ() генерирует исключение, проверяя, является ли оконным дескриптором переданный ей дескриптор. Значит, по твоему получается, что главного окна уже не существует? Но ведь тот же код вставленный в другие обработчики работает нормально! А ΙD указан правильно - я это первым делом проверил. К тому же, даже если бы ID был неверен я бы получил в указателе на объект окна NULL, а получаю исключение.
418
24 марта 2002 года
artgonch
54 / / 20.07.2000
Привет, это снова я. Хочу поделиться некоторыми соображениями по поводу своей же программы. Только что с небольшими переделками (в файле ресурсов) перенес ее в Borland C++ 5.02, и она заработала! Опять же, это не делает чести ни Visual C++, ни MFC, потому что в BC++ вместо MFC используется своя собственная биьлиотека (полностью совместимая с MFC на уровне заголовочных фалов, но, наверное, значительно лучше реализованная) BFC, причем, возможна статическая копмоновка с бинарным файлом. Так что теперь многих проблем можно избежать: я принесу в институт на занятие свой собранный проект, покажу его преподавателю (он, кстати, тоже недолюблтвает MS VC++ & MFC) и докажу, что программа на VC++ е работает, а моя - просто супер. Как вы думаете, прав ли я?
449
26 марта 2002 года
Fantasist
124 / / 20.06.2000
Посмотрел. GetDlgItem() ошибки не вызывает.
Вызывает ошибку вот это

char[20];
sprintf(s, InfoStr,
cv->GetCurrIndex() + 1,
cv->GetCount());

Где-то здесь чего-то нехорошего в стек перезаписывается. Почему скажу позже.

Да, кстати, в следующий раз неплохобы прислать файд .dsw (workspace), так как самому создавать проект и пихать в него все эти файлы не так здорово, и еще очень здорово было бы прислать файл с которым программа должна работать, а то пришлось самому разбираться, что за формат файла ей нужен и его создавать. Хорошо, что прога не сложная. Все это заняло не меньше времени, чем локализация ошибки.
475
27 марта 2002 года
Winnie
90 / / 20.03.2000
Цитата:

...причем, возможна статическая копмоновка с бинарным файлом...


MFC тоже можно статично прилинковать

418
27 марта 2002 года
artgonch
54 / / 20.07.2000
И все равно Borland C++ и BFC во сто крат лучше, чем VC++. Это уже давно ясно, но некоторые люди, которые никогда не видели ничего кроме MS-XX++, утверждают обратное. Тут в форуме недавно читал о достоинствах и недостатках BC и МС. Так вот, могу сказать с полной уверенностью, что C++ Builder компилирует проекты во много раз быстрее, и размер проекта не имеет значения.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог