Преобразование проекта VC ++ 6 / Win32 в проект VS2010 C ++ / Win32: известные проблемы - PullRequest
10 голосов
/ 08 марта 2011

Известны ли вам какие-либо ресурсы, освещающие известные или возможные проблемы при преобразовании проекта VC ++ 6 / Win32 в VS2010 C ++ / Win32 типа проекта?Меня интересуют все виды проблем:

  • Совместимость параметров компилятора
  • Проблемы во время компиляции
  • Проблемы во время соединения
  • Проблемы во время выполнения
  • Проблемы с MFC

В противном случае, если вы уже выполнили этот вид миграции, с какими проблемами вы столкнулись?

Спасибо

Ответы [ 8 ]

5 голосов
/ 08 марта 2011

VC ++ 6 имеет нестандартную обработку исключений.Мы столкнулись с несколькими проблемами, потому что наш код содержит это:

try { 
  //Some code
} 
catch (...) {
  //Handle error
}

Некоторые разработчики полагались на это некорректное поведение, и наше приложение сильно зависало после компиляции в VS2008.

Эта статья хорошо объясняет и как решить проблему.

3 голосов
/ 08 марта 2011

Хех, vs6 позволил вам использовать переменные цикла вне области действия цикла.то есть:

for ( int i=0; i<10; i++ )
{
   if( i == 5 )
     break;
}

int iVal = i;

Это приведет к сбою во всех случаях> vs6 :) не удастся в 2005 и 2010 годах - хотя есть настройка компилятора, которая позволит вам снова вызвать это поведение (я бы предложил просто исправить его, донне заставляйте его, его несовместимо в любом случае), по крайней мере в 2005 году.Я еще не успел погрузиться в 2010 год, так как много занимаюсь встраиваемыми разработками, и кажется, что переключение компиляторов для встраиваемых систем - это, как правило, серьезная проблема.Так что я не могу сказать слишком много о 2010 году, но я знаю, что переживает!

3 голосов
/ 08 марта 2011
  1. Прежде всего, эти проблемы сильно зависят от качества кода и от того, как древний код был адаптирован для соответствия "особенностям" компилятора VC ++ 6.

  2. Невозможно преобразовать .dsp в формат VS 2010 напрямую (, по крайней мере, в экспресс-выпусках ), вам придется пройти через 2008 г., чтобы иметь возможность преобразовать.

  3. Мастера конвертации должны предупреждать и сообщать вам о любых возможных проблемах. Я не прошел через этот процесс, но я думаю, что переключатели компилятора - это наименьшее из ваших опасений. В целом, я ожидаю, что плохой код выдаст гораздо больше ошибок, о которых вам нужно беспокоиться.

Что касается ваших конкретных запросов:

  • См. 3.
  • VS2010 займет больше времени.
  • VS2010 компоновщик займет больше времени, особенно если вы включите оптимизацию времени соединения (введено в VS 2005)
  • только если вы сделали нестандартные предположения или если VC ++ 6 имеет нестандартные функции. Пока вы перекомпилируете весь проект с VS2010 (и, таким образом, свяжете его с последней версией VC (++)), никаких проблем во время выполнения не должно возникнуть.

sidenote : Я не говорю, что старый код является плохим, просто многие вопросы по SO относительно VC ++ 6 вызваны плохим качеством / соответствием кода.

2 голосов
/ 09 апреля 2013

При переходе с VS2005 на VS2010 мы столкнулись с проблемой со сторонней библиотекой, вызывающей сбой одной из наших программ при каждой загрузке.Проблема оказалась вызвана тем, что Microsoft изменила настройку по умолчанию для параметра / NXCOMPAT в компоновщике.Этот переключатель определяет, включена ли функция предотвращения выполнения данных (DEP).До VS2010 настройкой по умолчанию для этого переключателя было «НЕТ», и используемая нами DLL, очевидно, использовала эту настройку для правильной работы.

Я не уверен, насколько далеко заходит коммутатор компоновщика NXCOMPAT.Он не был указан ни в одной из настроек, доступных в диалоговых окнах VS2005 , но он был указан при запуске link /help из командной строки.Мне никогда не удавалось найти список изменений, подобных этому, от Microsoft, поэтому такую ​​ошибку очень сложно отследить.

2 голосов
/ 09 апреля 2013

Если у вас есть коммерческая версия Visual C ++:

Найдите devenv в каталоге установки Visual C ++ (должно быть %VS90COMNTOOLS%\..\IDE\devenv.exe

    > devenv /upgrade project.sln

    > msbuild.exe project.sln  /t:Build  /p:Configuration=Release /p:Platform=Win32

Проверьте компиляцию

но если у вас есть бесплатная версия Visual C ++:

Найдите vcbuild.exe в каталоге установки Visual C ++ (должно быть %PROGRAMFILES%\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe)

    > vcbuild.exe /upgrade   project.sln
      /msbuild:Configuration=Release
      /msbuild:Platform=Win32

Для будущих сборок, которые неt нужно преобразование, наберите:

> msbuild.exe project.sln /t:Build /p:Configuration=Release /p:Platform=Win32
2 голосов
/ 10 марта 2011

Перешел, две болезненные проблемы, о которых я знаю:
- По умолчанию в VC6 и более поздних версиях была изменена обработка исключений.Я считаю, что /Eh было значением по умолчанию, и оно изменилось.
- среда выполнения VC6 (msvcrt DLL) включена в любую ОС Windows начиная с Win2k, в то время как для любой другой версии вам необходимо установить ее вместе с программным обеспечением практически для любой ОС.

2 голосов
/ 08 марта 2011

У вас будет много проблем, потому что VC6 был общеизвестно несовместимым, и ваш код (особенно если вы использовали шаблоны), вероятно, будет полон хаков, чтобы заставить его работать, который больше не нужен, как MS сделал многоработа над соответствием для более поздних версий компилятора, и компилятор VC10, вероятно, прекратит их.

1 голос
/ 04 января 2017

Если вы переходите с VC ++ 6 на VS2015 с CLR, существующие функции min и max больше не найдены, добавьте

#define NOMINMAX
#include <algorithm>
namespace Gdiplus
{
  using std::min;
  using std::max;
};

Во-вторых, число с плавающей точкой NAN изменилось на nan

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