Что-нибудь, что я должен знать перед преобразованием большой программы на C++ из VS2005 в VS2008?

Что-нибудь, что я должен знать прежде, чем преобразовать большую программу на C++ из VS2005 в VS2008?

7 ответов

Решение

Я работаю над этой самой проблемой прямо сейчас.

Запуск WinMerge, чтобы увидеть, что я изменил...

Хорошо, вот что я должен был исправить в огромном клиентском приложении Win32/MFC:

Некоторые функции MFC стали виртуальными (чего не было в прошлом - CWnd::GetMenu, если я правильно помню). Также кое-что, связанное с нашей устаревшей поддержкой колесика мыши (до того, как в Windows была встроена поддержка колесика мыши), каким-то образом сломалось (я просто удалил эту функцию, так что я так и не понял, почему это сломалось).

Некоторые методы ATL (или параметры метода) были изменены на const, которые не были изначально (испортили мои переопределения).

Platform SDK новее - будьте осторожны, если вы правильно настраиваете версию SDK для Windows #defines (мы были не во всех местах - что было глупо). Теперь вы можете собирать с более новыми версиями (Vista/2008) структур Win32. Это не сработало так хорошо на моем компьютере с XP.

STDMETHOD теперь включает __declspec(nothrow), который на 100% прав - за исключением того, что в нашем коде обнаружены некоторые проблемы. Какой-то интерфейс, который был написан так, как будто он будет доступен через COM, но никогда не создавал исключений.

В среде IDE есть ошибка, когда отключенные точки останова не показывают пустую окружность на полях, если у вас не установлены точки останова для выделения всей строки (что, я думаю, является значением по умолчанию для VC++, может быть?).

Большинство из этих проблем было связано с тонкими ошибками в нашем коде или агрессивной перегрузкой библиотек MFC/ATL. Так как код всех остальных идеален, у вас все должно быть в порядке;)

На моей работе мы преобразовали большой проект C++ из VS2005 в VS2008. Проблем не было вообще. Излишне говорить, что вам непременно следует сохранить копию старого проекта на всякий случай.:)

Изменить: я должен был упомянуть, что проект должен быть независимым от платформы, и не имеет компонентов графического интерфейса.

Если вам нужно поддерживать старые платформы, будьте осторожны: VC2008 - это первая версия, которая не может быть ориентирована на Win9x или NT4. По этой причине моя компания должна придерживаться VC2005.

Если ваш проект использует MFC, вы должны знать, что в 2008 году он получил довольно серьезное обновление, которое может сломать вещи. В основном обновления безопасности и пользовательского интерфейса, так что, на мой взгляд, стоит делать все равно.

Смотрите здесь для получения более общей информации о том, что изменилось в VS 2008.

Недавно я преобразовал проект, написанный на VC++5, который я не затрагивал в течение 10 лет, в VS2008. Я только что загрузил проект и позволил VS2008 преобразовать его. Все прошло нормально. (проект сейчас здесь: http://www.codeplex.com/Uptime)

По нашему опыту, проекты конвертируются просто отлично. Единственное изменение кода, с которым мы столкнулись, было в том месте, где были удалены _MIN и _MAX - нам пришлось изменить его на std::min() и т. Д. Наш материал MFC скомпилирован нормально. Нашей самой большой головной болью было получение версий VS 2008 сторонних библиотек, которые мы купили, и создание версий VS 2008 для больших пакетов с открытым исходным кодом, таких как boost, OpenSceneGraph и GDAL. Не ракетостроение - просто утомительно. Я написал краткий обзор в своем блоге.

Есть ли разница в синтаксисе, которую нельзя просто перекомпилировать? VS автоматически преобразует файлы.sln и vcproj. Все остальное - просто код, и если вы не делаете что-то действительно странное, его следует просто перекомпилировать как есть.

Другие вопросы по тегам