Преобразование проекта VС++ 6/Win32 в VS2010 Проект С++/Win32: известные проблемы
Знаете ли вы о каких-либо ресурсах, выделяющих известные или возможные проблемы при преобразовании проекта VС++ 6/Win32 в тип проекта VS2010 С++/Win32? Меня интересуют всевозможные проблемы:
- Совместимость параметров компилятора
- Проблемы времени компиляции
- Проблемы времени связи
- Проблемы времени выполнения
- Проблемы MFC
В противном случае, если вы уже выполнили такую миграцию, какие проблемы вы столкнулись?
Спасибо
Ответы
Ответ 1
VС++ 6 имеет нестандартную обработку исключений. Мы затронули несколько проблем, потому что наш код содержит следующее:
try {
//Some code
}
catch (...) {
//Handle error
}
Некоторые разработчики полагались на это сломанное поведение, и наше приложение сильно вредилось после компиляции в VS2008.
Эта статья объясняет это хорошо и как решить проблему.
Ответ 2
-
Прежде всего, эти проблемы сильно зависят от качества кода и того, как древний код был адаптирован для соответствия "компиляторам" VС++ 6.
-
Невозможно напрямую преобразовать .dsp
в формат VS 2010 (по крайней мере с помощью экспресс-изданий) я должен пройти через 2008 год, чтобы иметь возможность конвертировать.
-
Мастера преобразования должны предупреждать и сообщать вам о любых проблемах, которые могут возникнуть. Я не прошел этот процесс, но я думаю, что коммутаторы компилятора - это наименьшее из ваших забот. В общем, я ожидаю, что плохой код будет производить намного больше ошибок, о которых вам нужно беспокоиться.
Что касается ваших конкретных запросов:
- См. 3.
- VS2010 займет больше времени.
- Ссылка на VS2010 займет больше времени, особенно если вы включите оптимизацию времени соединения (представленную в VS 2005).
- только если вы сделали нестандартные предположения или если VС++ 6 имеет нестандартные функции. До тех пор, пока вы перекомпилируете полный проект с VS2010 (и, таким образом, привяжите его к последней версии VC (++)), не должно возникать проблемы времени выполнения.
sidenote: я не говорю, что старый код плохой, просто много вопросов о SO относительно VС++ 6 вызвано плохим качеством кода/соответствием.
Ответ 3
Хех, vs6 позволил вам использовать переменные цикла вне области цикла. то есть:
for ( int i=0; i<10; i++ )
{
if( i == 5 )
break;
}
int iVal = i;
Это не сработает ни в чем > vs6:) не удастся в 2005 и 2010 годах, хотя есть параметр компилятора, который позволит вам снова принудительно повторить это поведение (я бы предложил просто исправить его, не заставлять его, его несоответствие в любом случае), по крайней мере, в сравнении с 2005 годом. Я еще не сделал погружение до 2010 года, так как я делаю много встроенных разработок, и кажется, что переключение компиляторов для встроенных материалов, как правило, является большой болью. Поэтому я не могу сказать слишком много за 2010 год, но я знаю, что это происходит!
Ответ 4
У вас будет много проблем, потому что VC6 был, как известно, несоответствующим, и ваш код (особенно если вы использовали шаблоны), скорее всего, будет заполнен хаками, чтобы заставить его работать, что больше не нужно, поскольку MS сделала много совместимость для более поздних версий компилятора, и компилятор VC10, вероятно, будет зависеть от них.
Ответ 5
Было ли движение, две болезненные проблемы, о которых я знаю:
- Исправлена ошибка обработки по умолчанию между версиями VC6 и более поздними версиями. Я считаю, что /Eh
был значением по умолчанию и изменился.
- VC6 runtime (msvcrt DLL) входит в любую ОС Windows с момента выпуска Win2k, а для любой другой версии вам необходимо установить ее с вашим программным обеспечением практически для любой ОС.
Ответ 6
Если у вас есть коммерческая версия Visual С++:
Найдите devenv в каталоге установки Visual С++ (должно быть %VS90COMNTOOLS%\..\IDE\devenv.exe
> devenv /upgrade project.sln
> msbuild.exe project.sln /t:Build /p:Configuration=Release /p:Platform=Win32
Проверьте компиляцию
но если у вас есть свободная версия Visual С++:
Найти vcbuild.exe
в каталоге установки Visual С++ (должно быть %PROGRAMFILES%\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe
)
> vcbuild.exe /upgrade project.sln
/msbuild:Configuration=Release
/msbuild:Platform=Win32
Для будущих сборок, которые не требуют преобразования, введите:
> msbuild.exe project.sln /t:Build /p:Configuration=Release /p:Platform=Win32
Ответ 7
При переходе с VS2005 на VS2010 у нас возникла проблема с библиотекой сторонних разработчиков, которая приводила к сбою одной из наших программ при каждом ее загрузке. Проблема оказалась вызвана тем, что Microsoft изменила значение по умолчанию для переключателя /NXCOMPAT в компоновщике. Этот переключатель определяет, включена или нет функция предотвращения выполнения данных (DEP). До VS2010 настройка по умолчанию для этого коммутатора была НЕТ, и используемая нами DLL, по-видимому, полагалась, что эта настройка функционирует правильно.
Я не уверен, как далеко продвинулся переключатель компоновщика NXCOMPAT. Он не был указан ни в одном из параметров, доступных в диалоговом окне VS2005, но был указан, когда link /help
был запущен из командной строки. Я никогда не мог найти список изменений, подобных этому от Microsoft, поэтому такая ошибка очень сложна для отслеживания.
Ответ 8
Если вы переходите с VС++ 6 на VS2015 с CLR, существующие функции min и max больше не будут найдены, добавьте
#define NOMINMAX
#include <algorithm>
namespace Gdiplus
{
using std::min;
using std::max;
};
Во-вторых, поплавок NAN изменился на nan