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

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

Ответы [ 7 ]

8 голосов
/ 28 октября 2008

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

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

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

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

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

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

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

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

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

2 голосов
/ 28 октября 2008

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

2 голосов
/ 28 октября 2008

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

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

1 голос
/ 28 октября 2008

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

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

0 голосов
/ 28 октября 2008

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

0 голосов
/ 28 октября 2008

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

0 голосов
/ 28 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...