Преобразование проекта 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