![]() |
|
![]() ![]() ![]() |
|
ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Был проект на MSVS 2008 (MFC). После конвертации повилась следующая проблема. В одном классе была объявлена переменная
Далее в конструкторе этого класса:
это работало в 2008. После конвертации проект собирается, но при запуске крашится. Выяснилось что в конструкторе m_Progress = null, то есть ещё не создан. Что мне сделать? Дописать m_Progress.Create()? или что-то можно где-то указать, чтобы этот экземпляр m_Progress опять собирался по-умолчанию. Боюсь как бы такая проблема не вылезла с кучей остальных объектов объявленных в классах. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
OnInitDialog() прекрасно подходит.
|
|||
|
||||
ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Albor, спасибо, помогло.
Дальше другая проблема. Тоже связана с инициализацией диалога. В классе диалога объявлены переменные:
Далее в функции OnCreate:
Раньше, в MSVS208, это прекрасно работало. Теперь же, как и в предыдущих постах, вылетает эксепшн, и видимо из-за того, что переменные m_dlgManager и m_dlgViewHistory равны 0x00000000. Теперь кроме вопроса "что делать?" у меня добавляется ещё один вопрос более философского характера. В MSVS2010 что ли убрали кучу костылей, которые раньше подправляли не совсем корректный код программистов? Ну там, например, инициализация по-умолчанию.. и т.д. Т.е стандарт С++, используемый в MSVS2010, гораздо строже предыдущего? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Опять-же, разве нельзя проделать то же самое в OnInitDialog() - функции, специально для этого предназначенной?
|
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Наверное можно. Просто я думал, что в функции создания (create) всё, что надо, создается, а в функции инициализации (init), всё что надо инициализируется. Не знал, что OnInitDialog() предназначена для создания. И, опять же, напрягает, что раньше-то все работало, а теперь - фиг. Проект большой, таких мест, где надо что-то куда-то переносить, может оказаться много.
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
ksili, нужно различать C++ объекты и виндовские окна. В конструкторе виндовское окно никогда не создается. И раньше не создавалось. Самое место для инициализации зависимых от окон параметров - OnInitDialog. Вполне могла измениться реализация библиотеки, которая раньше для инициализации не требовала наличие окна, а теперь требует. Или хотя бы зачем-то ASSERT там поставили.
При переходе на другую версию компилятора наивно думать, что все само заработает. Это только c программой "Хелло Ворд" может прокатить. В MSDN есть список изменений, который нужно проштудировать: что-то стразу можно поправить, что-то поставить себе на заметку "протестировать". И тотальное тестирование - мало ли что еще вылезет. Кроме того, могут вылезти старые баги, которые почему-то раньше прокатывали... -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |