Изменения в Visual C++ .NET 2003
Обновлен: Ноябрь 2007
![]() |
---|
Некоторые возможности, упомянутые в данном разделе, могут пока не поддерживаться в текущей версии 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
Щелкните правой кнопкой мыши нужный проект и выберите в контекстном меню пункт Свойства.
Появится диалоговое окно Свойства проекта.
В левой области последовательно нажмите MIDL и выберите пункт Командная строка.
В текстовом поле Дополнительные параметры введите /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.
Примечание.
В данном выпуске разрешена проблема, описанная в статье базы знаний "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-файла, а также использует локальную копию файла схемы.
Среда разработки
![]() |
---|
Некоторые возможности, упомянутые в данном разделе, могут пока не поддерживаться в текущей версии 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 |