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


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

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

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

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

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

  • Управляемый код и определение целевых объектов на платформе .NET Framework

  • Атрибутивное программирование

  • Компилятор и компоновщик Visual C++. Сведения о языке Visual C++

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

  • Редакторы ресурсов

  • Библиотеки

  • Развертывание и распространение приложений

  • Примеры по Visual C++ .NET

Управляемый код и определение целевых объектов на платформе .NET Framework

В Visual C++ предлагается два способа написания управляемого кода. Оба способа разработаны для упрощения программирования в модели COM и для разрешения программам доступа к службам, предоставляемым средой CLR .NET, например, к сборщикам мусора и средствам языкового взаимодействия.

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

  • Visual C#   C# – это новый простой, строго типизированный и объектно ориентированный язык программирования. Язык C#, представляющий собой развитие языков C и C++, предназначен для разработчиков, создающих новые приложения на платформе .NET Framework.

Атрибутивное программирование

Атрибуты разработаны для обеспечения эффективного и быстрого метода в целях упрощения программирования с использованием модели COM в Visual C++. Атрибуты, как ключевые слова C++, используются в исходных файлах и интерпретируются компилятором. Атрибуты могут изменять поведение существующего кода и даже добавлять дополнительный структурный код для выполнения базовых задач, таких как применение элементов управления ActiveX, создание производства объектов класса или форматирование команды базы данных. Атрибуты можно применять почти ко всем объектам Visual C++, например к классам, элементам данных и функциям-членам; кроме того, атрибуты можно вставлять в исходный код в качестве автономных операторов.

В справке по Visual C++ имеются пошаговые руководства, охватывающие различные аспекты атрибутивного программирования.

Компилятор и компоновщик Visual C++. Сведения о языке Visual C++

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

Компилятор

  • Вопросы соответствия стандартам Visual C++.

  • Параметр компилятора /AI.

  • Параметр компилятора /clr.

  • Параметр компилятора /FU.

  • Параметр компилятора /Fx.

  • Параметр компилятора /GH.

  • Параметр компилятора /Gi удален; компилятор Visual C++ более не поддерживает пошаговую компиляцию. Параметр компилятора /Gi будет молча игнорироваться компилятором.

  • Параметр компилятора /GD удален из компилятора.

  • Параметр компилятора /GL.

  • Параметр компилятора /GS.

  • Новые ключевые слова, связанные с управляемыми расширениями для C++.

  • Параметр /Qlfist теперь задокументирован.

  • /O1 и /O2 теперь используют /GF вместо /Gf.

  • /Ox, /O1 и /O2 теперь используют /Ob2 вместо /Ob1.

  • Параметр компилятора /RTC.

  • Параметр компилятора /showIncludes.

  • Параметр компилятора /w теперь позволяет задавать поведение конкретных предупреждений компилятора.

  • Параметр компилятора /Wall теперь позволяет включать все предупреждения, в т.ч. и отключенные по умолчанию.

  • Параметр компилятора /WL.

  • Параметр компилятора /Wp64.

  • Параметр компилятора /Y.

  • Параметр компилятора /Zc:forScope.

  • Параметр компилятора /Zc:wchar_t.

  • Список предупреждений, отключенных по умолчанию.

  • Логические выражения теперь имеют тип bool, а не BOOL.

Компоновщик

  • Параметр компоновщика /ALLOWBIND.

  • Параметр компоновщика /ASSEMBLYMODULE.

  • Параметр компоновщика /ASSEMBLYRESOURCE.

  • Параметр компоновщика /COMMENT не рекомендуется. Следует использовать вместо него директиву comment.

  • Служебная программа CVPACK удалена.

  • Параметр компоновщика /DEBUGTYPE удален. Поддержка символов в формате COFF удалена, теперь символы нужно помещать в PDB-файл.

  • Параметр компоновщика /GPSIZE удален. Компоновщик теперь определяет оптимальное расположение для общих переменных (инициализирующих глобальные элементы данных) в зависимости от наличия связанных с GP перемещений в данные.

  • Параметр компоновщика /IDLOUT.

  • Параметр компоновщика /IGNOREIDL.

  • Параметр /LINK50COMPAT удален. Библиотеки импорта, созданные в Visual C++ .NET, совместимы с Visual C++ 6.0.

  • Параметр компоновщика /LTCG.

  • Параметр /MAPINFO:FIXUPS удален.

  • Параметр компоновщика /MIDL.

  • Параметр компоновщика /NOASSEMBLY.

  • Параметр компоновщика /PDB:NONE удален. Отладочная информация в EXE-файле больше не поддерживается.

  • Параметр компоновщика /PDBSTRIPPED.

  • Параметр компоновщика /PDBTYPE удален. Отладочная информация будет помещаться в отдельный PDB-файл.

  • Параметр компоновщика /PROFILE удален. Если применяется профилировщик стороннего производителя, которому необходим параметр /PROFILE, следует использовать вместо него параметр /FIXED:NO. В данной версии компоновщик еще принимает параметр /PROFILE как синоним /FIXED:NO.

  • Служебная программа "Профилировщик источника" удалена.

  • Параметр компоновщика /TLBID.

  • Параметр компоновщика /TLBOUT.

  • Параметр компоновщика /TSAWARE.

  • Параметр компоновщика /WARN удален.

Служебная программа Dumpbin

  • Параметр /CLRHEADER.

  • Параметр /IMPORTS служебной программы DUMPBIN теперь принимает дополнительный параметр, позволяющий отображать импорты из указанной библиотеки DLL.

  • Параметр /PDBPATH.

  • Параметры /RAWDATA переименованы, но синтаксис из предыдущих версий еще действует.

  • Параметр /UNWINDINFO.

Язык Visual C++

  • Ключевое слово _AddressOfReturnAddress задокументировано.

  • Ключевое слово __alignof.

  • Включена поддержка ковариантных возвращаемых типов.

  • Ключевое слово __declspec(align).

  • Ключевое слово __declspec(deprecated).

  • Ключевое слово __declspec(noinline).

  • Ключевое слово __declspec(selectany) теперь поддерживает динамически выделенные объекты (объекты, инициализированные конструктором).

  • Ключевое слово __event.

  • Оператор for в /Ze изменен для большего соответствия стандартному поведению.

  • Ключевые слова __if_exists и __if_not_exists.

  • Ключевое слово __interface.

  • Включена поддержка блоков функций.

  • Тип данных __m64.

  • Тип данных __m128.

  • Тип данных __m128d.

  • Тип данных __m128i.

  • Встроенные расширения MMX, SSE и SSE2.

  • Ключевое слово __super.

  • В ключевом слове template теперь разрешено использование параметров шаблона.

  • Синтаксис throw(...).

  • Внутренний параметр компилятора __assume.

  • Внутренний параметр компилятора __debugbreak.

  • Внутренний параметр компилятора __noop.

  • Явные переопределения.

  • Допускается до 256 уровней вложенности скобок в одном выражении.

  • Ключевое слово _ReturnAddress задокументировано.

  • Ключевое слово __sealed.

  • Ключевое слово __w64.

  • wchar_t теперь собственный тип данных.

  • Новые ключевые слова, связанные с управляемыми расширениями для C++.

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

  • Директива conform.

  • Предопределенный макрос __COUNTER__.

  • Директива deprecated.

  • Предопределенный макрос __FUNCDNAME__.

  • Предопределенный макрос __FUNCSIG__.

  • Предопределенный макрос __FUNCTION__.

  • Директива #import.

  • Включена возможность задания библиотек типов с помощью progid или libid.

  • Новые атрибуты директивы #import:

    • embedded_idl.

    • no_dual_interfaces.

    • no_smartpointers.

  • Директива препроцессора _MANAGED.

  • Директивы managed и unmanaged.

  • Директива pack теперь имеет параметр show для отображения текущего значения пакета.

  • pop_macro задокументирован.

  • push_macro задокументирован.

  • Директива runtime_checks.

  • Директива section.

  • Директива #using.

  • Директива препроцессора _WCHAR_T_DEFINED.

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

Приведенные далее функциональные возможности и изменения среды разработки являются новшеством в Visual C++ .NET.

  • Расширен класс "Представление".

  • Добавлена новая процедура "Исключение файлов во время проверки зависимостей".

  • В окне "Свойства" предоставляется настраиваемая сетка для просмотра и изменения свойств объектов в проекте.

  • Страницы свойств проекта позволяют задавать параметры построения для проектов.

  • Мастера теперь разработаны в HTML и JScript с поддержкой текстовых файлов и стали более гибкими и расширяемыми.

  • WizardBar и ClassWizard удалены.

  • Настройка процесса построения – это новое событие фазы "до построения".

  • Мастер "Новая база данных" удален из Visual C++ .NET.

  • Экспорт файла NMAKE более невозможен. Для построения проекта Visual C++ из командной строки используйте переключатели командной строки devenv.

  • В проектах Visual C++ 6.0, использовавших параметры /Gf и импортированных в данную новую версию, параметры /Gf будут преобразованы в /GF.

Редакторы ресурсов

Панель инструментов редактора изображений и селектор параметров

Панель инструментов редактора изображений в Visual C++ 6.0 называлась панелью графических инструментов. Хотя кнопки на панели инструментов остались те же (средства рисования, закрашивания, ввода текста, очистки и управления представлениями), ее поведение и внешний вид несколько изменились.

В Visual C++ 6.0 панель графических инструментов изначально была прикрепленным окном в левой стороне рабочего пространства, и селектор параметров появлялся как поле в этой панели инструментов. В Visual C++ .NET панель инструментов редактора изображений появляется вверху рабочей области. Селектор параметров теперь появляется в крайнем правом положении панели инструментов в виде кнопки с раскрывающейся стрелкой. Значок на кнопке селектора параметров меняется в зависимости от выбранного инструмента.

Диалоговое окно инструмента "Текст" в панели инструментов редактора изображений

Поведение диалогового окна инструмента "Текст" в Visual Studio .NET изменилось по сравнению с Visual C++ 6.0.

Действие

Результат в Visual C++ 6.0

Результат в Visual Studio .NET

Нажатие клавиши ENTER.

В текст вводится новая строка.

Происходит выход из инструмента "Текст" и фиксация внесенных изменений.

Нажатие кнопки Закрыть.

Происходит выход из инструмента "Текст" и фиксация внесенных изменений.

Происходит выход из инструмента "Текст" и фиксация внесенных изменений.

Нажатие клавиши ESC.

Происходит выход из инструмента "Текст" и фиксация внесенных изменений.

Происходит выход из инструмента "Текст" и отмена внесенных изменений.

Нажатие комбинации клавиш SHIFT + ENTER.

Не применяется.

В текст вводится новая строка.

Нажатие комбинации клавиш CTRL+ENTER.

Не применяется.

В текст вводится новая строка.

Эти изменения, внесенные в поведение инструмента "Текст", делают его более похожим на стандартные диалоговые окна и другие инструменты редактора изображений.

Библиотеки

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

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

Далее приводится список новых или измененных библиотек Visual C++ .NET.

Библиотека шаблонных классов ATL

  • Изменены значения параметров по умолчанию для проектов библиотек ATL.

  • Разделы, посвященные методам библиотек ATL, содержат примеры кода.

  • Включена поддержка коллекций и перечислителей: ICollectionOnSTLImpl, IEnumOnSTLImpl, CComEnumImpl, CComEnumOnSTL, CComEnum.

  • Новый класс CImage предоставляет улучшенную поддержку растровых изображений, включая возможность загрузки и сохранения изображений в форматах JPEG, GIF, BMP и PNG.

  • Новые классы для управления массивами, списками и деревьями: CAtlArray, CAtlList, CAtlMap, CRBMap и CRBMultiMap.

  • Новые классы и макросы преобразования строк.

  • Служебные классы: CAdapt.

  • Классы для размещения элементов управления ActiveX: IAxWinAmbientDispatch, IAxWinHostWindow, CAxWindow2.

  • Усовершенствования в CComBSTR и CComVariant.

  • Новые макросы: OBJECT_ENTRY_AUTO и OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO.

  • Упрощенное создание объектов: CComCoClass::CreateInstance.

  • Улучшенная поддержка отладки: _ATL_DEBUG_INTERFACES.

  • Поддержка реестра для значений REG_MULTI_SZ: CRegKey.

  • Новые классы безопасности: CAcl, CDacl, CSacl, CSecurityAttributes, CSecurityDesc, CSid, CTokenGroups и CTokenPrivileges.

  • Новые классы управления массивами: CSimpleArray, CSimpleMap, CComSafeArray, CComSafeArrayBound.

  • Класс объекта "Валюта": CComCurrency.

  • Следующие макросы ATL должны рассматриваться как устаревшие: atlTraceFlags, ATLTrace, BEGIN_OBJECT_MAP, OBJECT_ENTRY, END_OBJECT_MAP.

  • Некоторые методы библиотек ATL были заменены.

  • Функциональные возможности CComModule теперь распределены по нескольким новым классам.

Сервер ATL

Сервер ATL – это набор собственных классов C++, с помощью которых разработчики могут создавать веб-приложения, веб-службы XML и другие серверные приложения. Многие классы можно также использовать в клиентских приложениях или компонентах.

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

  • Функции проверок ошибок во время выполнения.

  • Оператор new может создать приложение или возвратить нуль в случае ошибки выделения памяти.

  • Восстановление при переполнении стека с помощью _resetstkoflw.

  • Новые функции, позволяющие работу с датами далее 2038 года:

    _ctime64

    _wfindnext64

    _gmtime64

    _wstat64

    _wctime64

    _fstat64

    _localtime64

    _time64

    _findfirst64

    _ftime64

    _mktime64

    _utime64

    _wfindfirst64

    _futime64

    _stat64

    _wutime64

    _findnext64

     

     

     

  • Настройка проверок отладочной кучи с помощью _CrtSetDbgFlag.

  • Определение типов блоков и подблоков _CrtReportBlockType.

  • Математические константы.

  • Новые функции символов расширенной формы:

    _cwprintf

    _putwch

    _putws

    _wtof

  • Новые версии __int64 в строковых функциях:

    _strtoi64

    _strtoui64

    _wctoi64

    _wcstoui64

  • Новые версии Юникода в консольных функциях:

    _getwch

    _ungetwch

    cgetws

    _getwche

    _cwscanf

     

     

     

  • Новые строковые функции, вычисляющие количество символов, необходимое для печати отформатированных данных:

    _scprintf

    _scwprintf

    _vscprintf

    _vscwprintf

    _snscanf

    _snwscanf

     

     

  • Функции выравнивания данных.

  • _set_security_error_handler для регистрации обработчика ошибки безопасности.

  • Из-за сроков выпуска C99 данная версия Visual C++ несовместима с этим стандартом.

  • Новые функции с перестановкой байтов: _byteswap_uint64, _byteswap_ulong, _byteswap_ushort.

  • _set_SSE2_enable для использования инструкций SSE2.

  • _CrtSetReportHook2.

Библиотека Microsoft Foundation Class

  • Разделы, посвященные методам библиотеки Microsoft Foundation Class, содержат сотни новых примеров кода.

  • Статические схемы приведения и сообщений MFC. Начиная с Visual C++ .NET, MFC предоставляет более строгую проверку для возвращаемых типов и типов параметров функций обработчиков сообщений. Теперь предусмотрено уведомление разработчиков о возможных проблемах путем пометки потенциально небезопасных обработчиков сообщений сообщением об ошибке. MFC теперь использует статическое приведение для ON_MESSAGE, ON_REGISTERED_MESSAGE, ON_THREAD_MESSAGE и ON_REGISTERED_THREAD_MESSAGE.

    Например, в прошлом разработчик мог использовать функцию-член, возвращающую для обработчиков ON_MESSAGE или ON_REGISTERED_MESSAGE значение void вместо LRESULT, и выполнять компиляцию без ошибок. В Visual C++ .NET это потенциально неверное приведение улавливается и помечается как ошибка. Разработчик может разрешить эту потенциальную проблему, заменив возвращаемый тип на LRESULT и выполнив компиляцию снова.

  • Компонент редактирования DHTML: CHtmlEditCtrl, CHtmlEditView, CHtmlEditDoc.

  • Диалоговые окна DHTML: CDHtmlDialog, CMultiPageDHtmlDialog.

  • Поддержка ISAPI для синтаксического анализа списков аргументов: CHttpArg, CHttpArgList:

  • Поддержка безоконных элементов управления: COleControlSite, COleControlContainer и COccManager.

  • Улучшенная поддержка использования справки HTML в приложении MFC.

  • Страница свойств печати Windows 2000: CPrintDialogEx.

  • Поддержка DAO. Мастер приложений Visual C++ MFC и мастер приложений DLL MFC больше не поддерживают проекты баз данных DAO. Однако производные от DAO классы еще можно добавлять с помощью матера добавления класса. Корпорация Майкрософт рекомендует использовать для новых собственных проектов С++ OLE DB или ODBC. DAO необходимо использовать только для поддержки существующих приложений.

  • TRACE0, TRACE1, TRACE2 и TRACE3 теперь считаются устаревшими; рекомендуется использовать ATLTRACE2. TRACE теперь имеет те же функции, что и ATLTRACE2.

  • При выборе шрифта для диалогового окна необходимо использовать MS Shell Dlg, а не MS Sans Serif или Helv. Предыдущие версии MFC будут автоматически заменять MS Sans Serif или Helv на DEFAULT_GUI_FONT или на системный шрифт, но больше в MFC такой возможности не будет.

  • Улучшенная поддержка локализованных ресурсов во вспомогательных библиотеках DLL.

Шаблоны OLE DB

В Visual C++ предоставляются следующие шаблоны OLE DB:

  • Новые классы объектов-получателей: CDataConnection, CDynamicAccessor, CDynamicParameterAccessor, CDynamicStringAccessor, CDynamicStringAccessorA, CDynamicStringAccessorW, CStreamRowset, CXMLAccessor.

  • Новые макросы объектов-получателей: макрос COLUMN_NAME* для привязки к конкретному столбцу базы данных по имени и макрос BLOB* для привязки больших двоичных объектов (BLOB).

  • Новые классы поставщика: IDBSchemaRowsetImpl, IErrorRecordsImpl, IRowsetChangeImpl, IRowsetCreatorImpl, IRowsetNotifyCP, IRowsetNotifyImpl, IRowsetLocateImpl, IRowsetUpdateImpl.

Новые 64-разрядные типы данных

В некоторых классах шаблонов OLE DB методы были изменены, и теперь используют новые 64-разрядные типы данных вместо старых 32-битовых. Эти изменения отражены в обновленной документации. В случае несоответствия между документацией и файлами заголовка необходимо учитывать, что файлы заголовка содержат самые свежие типы параметров.

Совместно используемые классы

Теперь в каждой программе Visual C++ можно использовать множество новых и пересмотренных классов.

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

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

  • Класс hash_map.

  • Класс hash_set.

  • Поддержка дополнительной обработки исключений.

  • Улучшенное форматирование кода (для удобочитаемости).

  • Улучшенная поддержка библиотек DLL (передача объектов между границами процессов).

  • Улучшенная поддержка многопоточности.

  • Улучшенная совместимость со стандартом.

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

В Visual C++ не рекомендуется использование старой библиотеки iostream; каждый раз при использовании функции iostream будет выводиться предупреждение. Возможно, в последующем выпуске старая библиотека iostream будет удалена.

Развертывание и распространение приложений

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

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

Распространять приложения Visual C++ можно с помощью развертывания в Visual Studio, которое позволяет создавать исполняемые файлы установки, упаковывать файлы и публиковать их на веб-страницах.

Если нет желания использовать развертывание Visual Studio, но имеется собственное (неуправляемое) приложение Visual C++, можно открыть зависимости этого приложения и разработать собственный процесс установки.

Примеры по Visual C++ .NET

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

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

В Visual C++ .NET включены все новые примеры в следующих областях:

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

  • Сервер ATL

  • Атрибуты

  • Управляемые расширения для C++

  • MASM

  • Отладка

  • Пользовательский мастер

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

    Поскольку архитектура мастера изменена, предыдущие примеры для пользовательских мастеров заменены новыми.

  • Модель кода

  • Модель проекта

  • Обработка событий

  • Многоязыковость

  • Приложение Tailspin Toys

Кроме того, для следующих областей Visual C++ .NET примеры из предыдущих версий дополнены новыми:

  • MFC

  • Библиотека ATL

  • Поддержка COM

  • Библиотека стандартных шаблонов (STL)

См. также

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

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