Поделиться через


Изменения в Visual C++ .NET 2003

Обновлен: Ноябрь 2007

7223w6b0.alert_note(ru-ru,VS.90).gifПримечание.

Некоторые возможности, упомянутые в данном разделе, могут пока не поддерживаться в текущей версии Visual C++. Дополнительные сведения см. в разделе Изменения в Visual C++ 2005 и в предыдущих выпусках.

В Microsoft Visual C++ .NET 2003 добавлено много усовершенствований и несколько новых функциональных возможностей.

  • Компилятор, компоновщик и язык Visual C++

  • Библиотеки Visual C++

  • Среда разработки

  • Конструктор Windows Forms в управляемых расширениях для C++

  • Модель автоматизации построения проекта

Компилятор, компоновщик и язык Visual C++

Рассматриваемые в этом разделе компилятор, компоновщик, другие средства построения и функциональные возможности языка Visual C++ являются новыми возможностями в Visual C++ .NET 2003.

Компилятор

  • Сведения о порядке выполнения сборки приложения управляемых расширений для C++ текущей версией компилятора в предыдущей версии среды выполнения.

  • Добавлено пошаговое руководство по переносу существующего собственного приложения в среду управляемых расширений для C++: "Пошаговое руководство. Перенос существующего собственного приложения C++ для взаимодействия с компонентами платформы .NET Framework".

  • Добавлена возможность создания делегата или метода типа значения.

  • В Visual C++ .NET 2003 значительно улучшено соответствие компилятора стандарту C++.

  • Добавлен параметр компилятора /arch.

  • Параметр /Gf устарел и в следующей версии Visual C++ будет удален.

  • Добавлен параметр компилятора /G7.

  • Параметр компилятора /GS был усовершенствован, чтобы помочь защитить локальные переменные от прямого переполнения буфера.

  • Параметр компилятора /noBool удален. Теперь компилятор разрешает использование bool только в качестве ключевого слова (не идентификатора) в файле исходного кода Visual C++.

  • Тип данных long теперь доступен в качестве определения типа (typedef) __int64. Обратите внимание, что в CRT тип данных long пока не поддерживается.

  • Параметр компилятора /Zm теперь задает ограничение объема выделяемой памяти для предварительно скомпилированного заголовка.

  • Встроенный объект _InterlockedCompareExchange задокументирован.

  • Встроенный объект _InterlockedDecrement задокументирован.

  • Встроенный объект _InterlockedExchange задокументирован.

  • Встроенный объект _InterlockedExchangeAdd задокументирован.

  • Встроенный объект _InterlockedIncrement задокументирован.

  • Добавлен встроенный объект _ReadWriteBarrier.

Атрибуты в Visual C++

  • Атрибут implements задокументирован.

Компоновщик

Добавлены следующие параметры компоновщика:

  • /ASSEMBLYDEBUG.

  • /ASSEMBLYLINKRESOURCE.

  • /DELAYSIGN.

  • /KEYFILE.

  • /KEYCONTAINER.

  • /SAFESEH.

Препроцессор

  • Использование символа _STATIC_CPPLIB в /MD задокументировано.

  • Символ _CPPLIB_VER задокументирован.

  • В директиве #import теперь имеются следующие задокументированные атрибуты:

    • auto_search

    • auto_rename

    • no_search_namespace

    • rename_search_namespace

    • tlbid

MASM

Добавлена директива .SAFESEH и параметр /safeseh файла ml.exe.

Библиотеки Visual C++

Старая библиотека iostream

В этой версии Visual C++ старая библиотека iostream удалена. Вместо этой библиотеки следует использовать стандартную библиотеку C++.

Библиотека времени выполнения языка С

  • В документацию по библиотеке времени выполнения C теперь включены сведения для эквивалентов платформы .NET Framework.

  • Добавлен объект _get_heap_handle.

  • Макрос _CRTDBG_CHECK_DEFAULT_DF, использовавшийся в _CrtSetDbgFlag, теперь задан как ноль, что означает, что по умолчанию проверка кучи не выполняется.

  • swprintf теперь совместим со стандартами ISO C (только C++).

  • vswprintf теперь имеет только форму C++, позволяющую задавать максимальное число хранимых символов.

  • Ранее для некоторых многобайтовых функций, например для _mbsset, CRT не всегда обнаруживала недопустимые многобайтовые строки, когда за первым байтом следует пустой второй байт. Теперь в CRT имеется больше проверок для недопустимых многобайтовых символов, в которых за первым байтом следует пустой второй байт.

  • Добавлен объект _set_purecall_handler.

  • Ранее, когда процесс загружал библиотеку DLL, на которую имелись статические ссылки из библиотеки CRT, точность чисел с плавающей запятой инициализировалась в 53 бита. В Visual C++ .NET 2003 точность чисел с плавающей запятой не инициализируется согласно этому сценарию. Это может привести к критическим изменениям в некоторых существующих приложениях, в которых точность чисел с плавающей запятой инициализируется на основе CRT.

  • Теперь в CRT имеются формы с плавающей запятой и двойной точностью для всех математических функций. Эти функции можно вызывать только из Visual C++.

Стандартная библиотека C++

В предыдущих выпусках ввод и вывод символов в потоке мог привести к тому, что символ или короткое значение без знака, хранящиеся в wchar_t, не задавались как машинные типы. Теперь короткое значение без знака всегда трактуется как символ.

В Visual C++ .NET 2003 члены файлов заголовков <hash_map> и <hash_set> перемещены из пространства имен std в пространство имен stdext.

Стандартная библиотека C++ была обновлена, и теперь может воспользоваться преимуществами улучшенной поддержки компилятором Visual C++ стандартов C++. Например, реализация стандартной библиотеки C++, поставляемая в Visual C++, теперь использует частичную специализацию шаблонов.

Библиотека ATL

  • В Visual Studio .NET 2003 компилятор MIDL имеет установленный по умолчанию флаг /robust, из-за чего проекты, выполняющиеся под Windows NT 4, перестают отвечать.

Изменение флага компилятора MIDL на /no_robust

  1. Щелкните правой кнопкой мыши нужный проект и выберите в контекстном меню пункт Свойства.

    Появится диалоговое окно Свойства проекта.

  2. В левой области последовательно нажмите MIDL и выберите пункт Командная строка.

  3. В текстовом поле Дополнительные параметры введите /no_robust.

  • Макрос преобразования строки USES_CONVERSION заменен макросом USES_CONVERSION_EX. Он будет пытаться выделить пространство в стеке. Если в стеке нет доступного пространства, то макрос будет пытаться найти его в куче. Если в куче нет места, то макрос будет возвращать NULL. Макрос USES_CONVERSION_EX имеет дополнительный параметр порогового значения (threshold), при использовании которого макрос будет напрямую переходить в кучу, если размер запроса больше значения threshold.

  • Параметр _alloca вытеснен параметром _atl_safe_alloca.

  • Класс CSocketAddr добавлен в целях предоставления независимых от протокола методов работы с адресами IPv6 и IPv4.

  • При построении проекта с выходными данными, представляющими собой исполняемый файл, ATL с помощью параметра %MODULE% файла сценария регистрации registrar автоматически добавляет кавычки к имени пути, созданному во время выполнения. Если имя пути не нужно заключать в кавычки, вместо этого параметра следует использовать новый параметр %MODULE_RAW%.

    При построении проекта с выходными данными, представляющими библиотеку DLL, ATL не заключает имя пути в кавычки, если использовался параметр %MODULE% или %MODULE_RAW%.

MFC

  • При удалении точки подключения сопоставления подключений больше не сжимаются; теперь удаленная точка подключения заменяется значением NULL. Следовательно, при использовании функции CConnectionPoint::GetConnections или CConnectionPoint::GetNextConnection необходимо выполнять проверки на наличие значений NULL.

  • Функции CSimpleString::FreeExtra, CSimpleString::GetAt, CSimpleString::operator [], CSimpleString::ReleaseBuffer, CSimpleString::ReleaseBufferSetLength, CStrBuf::SetLength и некоторые конструкторы CTime::CTime теперь могут вызывать исключения.

  • Изменено поведение функций AfxIsValidAddress и AfxIsValidString. В неотлаженных построениях эти функции только выполняют проверки на наличие непустых (не NULL) аргументов.

  • В функции CHeaderCtrl::GetOrderArray теперь отсутствует второй параметр по умолчанию; значение -1 теперь недопустимо для второго параметра.

  • В CAsyncSocket имеются новые члены, работающие с IPv6: GetPeerNameEx, GetSockNameEx, ReceiveFromEx и SendToEx.

ATL и MFC

  • Класс CImage теперь отслеживает число созданных объектов. Когда это число становится равным нулю, автоматически вызывается функция GdiplusShutdown, которая освобождает ресурсы, занятые GDI+. Это предотвращает излишнее занятие ресурсов при создании объектов CImage библиотекой DLL.

  • Класс MFC с именем CString переписан как класс шаблонов с именем CStringT. Это дает возможность использования класса CString в проектах ATL без привязки к большей статической библиотеке MFC или библиотеке DLL.

    7223w6b0.alert_note(ru-ru,VS.90).gifПримечание.

    В данном выпуске разрешена проблема, описанная в статье базы знаний "PRB: ошибки создания связей при импорте классов, производных от CString" (номер Q309801). Статьи базы знаний можно найти на компакт-диске библиотеки MSDN или по ссылке https://support.microsoft.com/default.aspx. Если в Visual C++ .NET 2002 при экспорте класса, производного от класса CString, из библиотеки DLL расширения MFC были обнаружены ошибки компоновщика, и они были исправлены с помощью метода, описанного в данной статье, то этот код необходимо удалить, потому что в Visual C++ .NET 2003 эта проблема решена.

  • CStrBufT и CSimpleStringT теперь имеют дополнительный параметр шаблона, который сообщает, используется ли класс CString из библиотеки DLL MFC. В файле atlsimplstr.h следует использовать определение типов из класса CStringT или CSimpleStringT, а не глобальное определение типов.

Сервер ATL

  • В веб-службе XML, созданной сервером ATL, после чтения параметров протокола SOAP по умолчанию выполняется их проверка. Чтобы отключить эту проверку, следует задать макрос _ATL_SOAP_NO_PARAMETER_VALIDATIONS.

  • SPROXY.EXE теперь может обрабатывать DISCOMAP-файл и WSDL-файл. При использовании WSDL-файла в качестве входного необходимо указать параметр /wsdl:

    sproxy /wsdl <input_location>
    

    где <input_location> – это путь WSDL-файла.

    SPROXY.EXE теперь может обрабатывать файл results.discomap:

    sproxy results.discomap
    

    Обратите внимание, что DISCOMAP-файл содержит ссылку на локальную копию WSDL-файла, а также использует локальную копию файла схемы.

Среда разработки

7223w6b0.alert_note(ru-ru,VS.90).gifПримечание.

Некоторые возможности, упомянутые в данном разделе, могут пока не поддерживаться в текущей версии Visual C++. Дополнительные сведения см. в разделе Изменения в Visual C++ 2005 и в предыдущих выпусках.

При открытии из Visual Studio .NET проекта Visual C++ в Visual C++ .NET 2003 старый файл проекта будет переименован, и будет создан новый файл проекта для среды Visual C++ .NET 2003.

Формат VCPROJ-файла теперь задокументирован.

В среде разработки появились следующие новые возможности:

  • Добавлены макросы $(WebDeployPath), $(WebDeployRoot), $(ParentName), $(RootNameSpace), $(SafeParentName) и $(SafeInputName).

  • Теперь возможно построить проект без построения зависимых от него проектов.

Управляемые расширения для шаблонов проектов C++

В данный выпуск включено несколько новых шаблонов проектов, которые можно использовать для создания приложений в управляемых расширениях для C++:

  • Библиотека элементов управления Windows (.NET).

  • Приложение Windows Forms (.NET).

  • Службы Windows (.NET).

Кроме того, в данном выпуске были переименованы шаблоны для управляемых проектов Visual C++ .NET 2002:

  • Управляемое приложение C++ теперь называется Консольное приложение (.NET).

  • Библиотека управляемых классов C++ теперь называется Библиотека классов (.NET).

  • Управляемый пустой проект C++ теперь называется Пустой проект (.NET).

  • Управляемая веб-служба C++ теперь называется Веб-служба ASP.NET.

Конструктор Windows Forms в управляемых расширениях для C++

С добавлением в этом выпуске конструктора Windows Forms в Visual C++ появилось решение по быстрой разработке приложений для создания приложений Windows Forms в управляемых расширениях для C++.

Эта функция включает полную поддержку Панели элементов и серверного проводника, что дает возможность перетаскивания, или вырезки и вставки, элементов управления и компонентов непосредственно в приложение Windows Forms. Кроме того, появился простой способ работы со свойствами элементов управления и компонентов с помощью сетки свойств.

Модель автоматизации построения проекта

В Visual C++ .NET предлагаются новые страницы свойств, множество новых объектов, а также новые свойства для существующих объектов, которые усовершенствуют модель построения проекта.

Новые страницы свойств

Страница свойств управляемых ресурсов.

Страница свойств инструмента создания XML-данных.

Страница свойств управляемой программы-оболочки.

Вспомогательная страница свойств управляемой программы-оболочки.

Новые объекты

Объект VCALinkTool

Объект VCActiveXReference

Объект VCAssemblyReference

Объект VCAuxiliaryManagedWrapperGeneratorTool

Объект VCManagedResourceCompilerTool

Объект VCManagedWrapperGeneratorTool

Объект VCPrimaryInteropTool

Объект VCProjectReference

Объект VCReference

Коллекция VCReferences

Объект VCReferenceConfiguration

Объект VCXMLDataGeneratorTool

Новые или измененные элементы существующих объектов

В существующие объекты были добавлены некоторые новые или обновленные свойства и методы. Обратите внимание, что изменения могут быть самыми разными, такими, например, как обновленная подпись или добавление новых элементов.

Объект

Новый или измененный член

Объект VCCLCompilerTool

Свойство EnableEnhancedInstructionSet

 

Свойство ToolKind

Объект VCLinkerTool

Свойство FixedBaseAddress

 

Свойство ToolKind

Объект VCLibrarianTool

Свойство ToolKind

Объект VCCustomBuildTool

Свойство ToolKind

Объект VCMidlTool

Свойство ToolKind

Объект VCResourceCompilerTool

Свойство ToolKind

Объект VCPreBuildEventTool

Свойство ToolKind

Объект VCPreLinkEventTool

Свойство ToolKind

Объект VCPostBuildEventTool

Свойство ToolKind

Объект VCBscMakeTool

Свойство ToolKind

Объект VCNMakeTool

Свойство ToolKind

Объект VCWebServiceProxyGeneratorTool

Свойство Пространство имен (VCProjectEngine)

 

Свойство Ссылки

 

Свойство ToolKind

Объект VCWebDeploymentTool

Свойство ToolKind

Объект VCProject

Метод AddAssemblyReference

 

Метод AddActiveXReference

 

Метод AddProjectReference

 

Метод CanAddAssemblyReference

 

Метод CanAddActiveXReference

 

Метод CanAddProjectReference

 

Свойство Object

 

Свойство Ссылки

 

Свойство ReferencesConsumableByDesigners

 

Метод RemoveReference

 

Свойство RootNamespace

 

Свойство VCReferences

Объект VCFile

Метод AddFile

 

Метод CanAddFile

 

Свойство Тип файла

 

Свойство Элементы

 

Свойство Object

 

Метод RemoveFile

Объект VCFilter

Свойство Object

Объект VCConfiguration

Свойство FullReferencesPath

 

Свойство ReferencesPath

 

Свойство ReferenceTools

 

Свойство SatelliteDLLs

 

Метод StopBuild

 

Свойство StyleSheets

Объект VCStyleSheet

Свойство FullReferencesPath

 

Свойство ReferencesPath

 

Свойство ReferenceTools

 

Свойство StyleSheetDirectory

 

Свойство StyleSheetName

Объект VCFileConfiguration

Свойство ProjectConfiguration

 

Метод Компиляция

 

Свойство OutputUpToDate

Объект VCProjectEngine

Свойство ShowEnvironmentInBuildLog

См. также

Другие ресурсы

Изменения продуктов в выпусках Visual C++