На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
Страницы: (20) [1] 2 3 ...  19 20 все  ( Перейти к последнему сообщению )  
> Проблемы перехода на Visual Studio 2005/2008 с более ранних версий , FAQ
    Господа.
    Давайте в этот топик писать обо всех проблемах перехода на VS 2005/2008
    Указывать с какой версии переходили, что за проблема, и способы ее решения.
    Или если решение не найдено, задавать вопрос.

    2Админы: Если сочтете нужным прикрепите этот топ.
      Может тогда проблемы перехода с одной студии на другую, не обязательно на 2005,
      за ней ведь наверняка появится и 2006б 2007, ..., 10000 :)

      p.s. Хотя ИМХО всех этих проблем не были бы, если бы при написании того же MFC Microsoft иногда посматривало бы в стандарт по C++, а не по С! И хотя бы попыталось усвоить, что такое ООП... :)
        Пытался собирать проект (созданный в VS2003) в VS2005. Под VS 2003 проект компилился без ошибок (и даже без предупреждений). В 2005-й студии возникло несколько ошибок суть, которых в следующем: вот кусок кода, который вызывает ошибку
        ExpandedWrap disabled
          for(int i = 0; i < 5; i++)
          {
             ...
          }
          for(i = 0; i < 5; i++)
          {
             ...
          }
        Ошибка error C2065: 'i' : undeclared identifier в выделенной строке. Исправить это можно конечно просто определив переменную i вне тела 1-го цикла, но хотелось бы узнать почему произошли такие изменения в новой студии и можно ли изменить трактовку компилятором таких фрагментов, на ту, которая была в VS 2003?
          Угу.а я наткнулся на то что std::hash_map теперь не в std а в stdext..
          решил проблему добавлением
          ExpandedWrap disabled
            namespace std
               {
               using namespace stdext;
               }

          что правда не очень хорошо... т.к. по стандарту я не имею право ковыряться в этом namespace - е ..
            Цитата dim_on @
            но хотелось бы узнать почему произошли такие изменения в новой студии и можно ли изменить трактовку компилятором таких фрагментов, на ту, которая была в VS 2003?

            Она стала больше дружить со стандартом.
            А по нему это всегда было ошибкой, и ты рано или поздно должен был получить по рукам за такой код.
              Цитата ViGOur @
              p.s. Хотя ИМХО всех этих проблем не были бы, если бы при написании того же MFC Microsoft иногда посматривало бы в стандарт по C++, а не по С! И хотя бы попыталось усвоить, что такое ООП... :)

              Не только MFC. ATL тоже не безгрешна))
              к примеру _Module и __uuidof ----> имена зарезервированные стандартом :P
                Вот ещё:
                1) Будьте осторожны - 8 студия не компилирует неиспользуемые участки.
                2) Если вы хотите оставить совместимость с предыдущими версиями студий, то вам придётся пользоватся условной компиляцией и делать развилки:
                ExpandedWrap disabled
                  #if _MSC_VER >= 1400
                       // Тут используем новые функции crt, с новой политикой безопасности
                       // Все новые версии функций crt заканчиваются специальным суффиксом '_s' ("secure")
                  #else
                       // Тут используем старые функции
                  #endif

                3) Настоятельно советую почитать раздел "Security Enhancements in the CRT" в MSDN.
                  У всех студий есть некая таинмтвенная бага в реализации спецификации шаблонов, поэтому, например, Foobar SDK компилируется ТОЛЬКО для 2005 студии.
                    Цитата dim_on @
                    Ошибка error C2065: 'i' : undeclared identifier в выделенной строке. Исправить это можно конечно просто определив переменную i вне тела 1-го цикла, но хотелось бы узнать почему произошли такие изменения в новой студии и можно ли изменить трактовку компилятором таких фрагментов, на ту, которая была в VS 2003?

                    В свойствах проекта во вкладке c++ language можно убрать галку "for loop conformant scope" (или что-то в этом роде).
                    А вообще, по стандарту правильно именно такое поведение.
                      Цитата mo3r @
                      А вообще, по стандарту правильно именно такое поведение.

                      Такое - это какое?
                      Правельнее в 2005-ой без галки..
                        По поводу безопасности в VS2005, _s закрывает одни дыры, открывает другие, к примеру если копировался путь с использованием strcpy_s и не скопировался полностью, то поведение программы может быть неизвестно, соответсвенно надо самому проверять длинну строки, что приводит к двойной проверке одних и тех же данных, так что я не вижу смысла в этих функциях.
                          Axis, Никаких дыр она не открывает. И не путай защиту на выход за пределы участка памяти, и защиту от нерадивого программера...
                            у меня одна проблема была при попытке перейти с 6.0 на 2005 - жутко не понравился интерфейс.
                            злой он там какой то. все привычные по шестерке действия в 2005 совершенно по другому.
                              Цитата Ace @
                              // Тут используем новые функции crt, с новой политикой безопасности // Все новые версии функций crt заканчиваются специальным суффиксом '_s' ("secure")

                              Чем начисто убиваем переносимость кода.
                                Цитата Axis @
                                если копировался путь с использованием strcpy_s и не скопировался полностью, то поведение программы может быть неизвестно

                                Тебе надо сильно постараться, чтобы поведение программы стало неизвестным. В частности, написать свою ловушку для неправильных аргументов, в которой ты будешь игнорировать такие вещи.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (20) [1] 2 3 ...  19 20 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0367 ]   [ 17 queries used ]   [ Generated: 28.03.24, 09:37 GMT ]