C++/WinRT
C++/WinRT — это полностью стандартная проекция языка C++17 для API среды выполнения Windows (WinRT), реализованная как библиотека на основе файлов заголовков и предназначенная для предоставления вам первоклассного доступа к современным интерфейсам API Windows. С помощью C++/WinRT можно создавать и использовать интерфейсы API среды выполнения Windows, используя любой совместимый со стандартами компилятор C++17. В пакет Windows SDK входит среда C++/WinRT, которая впервые появилась в версии 10.0.17134.0 (Windows 10, версия 1803).
C++/ WinRT предназначается для любых разработчиков, которые заинтересованы в написании превосходного и быстрого кода для Windows. Для этого есть следующие причины.
Преимущества C++/WinRT
Язык C++ используется как в корпоративном сегменте, так и независимыми поставщиками программного обеспечения для приложений, для которых необходимы высокие уровни надежности, качества и производительности. Вот некоторые из применений: системное программирование; ограниченные в ресурсах встроенные и мобильные системы; игры и графика; драйверы устройств; а также промышленные, научные и медицинские приложения.
Как язык C++ всегда применялся при разработке и использовании абстракций, одновременно облегченных и обладающих большим количеством типов. Но со времен необработанных указателей, необработанных циклов, сложного выделения памяти и выпуска C++98 язык сильно изменился. Современный C++ (начиная с версии C++11 и выше) позволяет четко выражать идеи, обеспечивает простоту, удобочитаемость и снижает вероятность появления ошибок.
Для создания и использования интерфейсов API Windows на языке C++ используется C++/WinRT. Это рекомендуемая корпорацией Майкрософт замена для проекции языка C++/CX и библиотеки шаблонов C++ для среды выполнения Windows (WRL).
При использовании C++/WinRT применяются стандартные типы данных, алгоритмы и ключевые слова C++. Эта проекция имеет собственные типы данных, но в большинстве случаев вам не нужно их изучать, так как они обеспечивают соответствующие преобразования из стандартных типов и обратно. Таким образом, можно продолжать использовать стандартные возможности языка C++, к которым вы привыкли, а также исходный код, который у вас уже есть. C++/WinRT радикально упрощает вызов интерфейсов API Windows в любом приложении на C++ для любой платформы — от Win32 до Windows AppSDK и UWP.
C++/WinRT работает лучше и создает двоичные файлы меньшего размера, чем любой другой вариант языка для среды выполнения Windows. Его производительность даже выше рукописного кода, использующего двоичные интерфейсы ABI напрямую. Это связано с тем, что абстракции используют современные идиомы C++, которые способен оптимизировать компилятор Visual C++. Это включает в себя волшебные статические методы, пустые базовые классы, элизию strlen, а также множество новых оптимизаций в последней версии Visual C++, специально предназначенных для повышения производительности C++/WinRT.
Существует два способа постепенного внедрения C++/WinRT в проекты: с помощью компонентов среды выполнения Windows или путем взаимодействия с C++/CX. Дополнительные сведения см. в статье Взаимодействие между C++/WinRT и C++/CX.
Сведения о переходе на C++/WinRT см. в следующих ресурсах.
См. раздел Где можно найти примеры приложений C++/WinRT?
Разделы о C++/WinRT
Раздел | Описание |
---|---|
Введение в C++/WinRT | Введение в C++/WinRT — стандартную проекцию языка C++ для API среды выполнения Windows. |
Начало работы с C++/WinRT | Чтобы вы могли быстро приступить к работе с C++/WinRT, в этой статье описывается простой пример кода. |
Что нового в C++/WinRT | Новости и изменения в C++/WinRT. |
Вопросы и ответы | Ответы на часто возникающие вопросы о разработке и использовании интерфейсов API среды выполнения Windows с помощью C++/WinRT. |
Устранение неполадок | Таблица симптомов и способов их устранения в этом разделе может быть полезна при создании нового кода и переносе существующего приложения. |
Пример приложения C++/WinRT — редактор фотографий | Редактор фотографий — это пример приложения UWP, демонстрирующего возможности разработки с помощью проекции языка C++/WinRT. Пример приложения позволяет извлекать фотографии из библиотеки Pictures, а затем редактировать выбранное изображение, используя разные фотографические эффекты. |
Обработка строк | С помощью C++/WinRT можно вызывать интерфейсы API среды выполнения Windows, используя стандартные типы широких строк C++ или тип winrt::hstring. |
Стандартные типы данных C++ и C++/WinRT | С помощью C++/WinRT можно вызывать интерфейсы API среды выполнения Windows с использованием стандартных типов данных C++. |
Упаковка-преобразование значений в IInspectable и распаковка-преобразование IInspectable | Скалярное значение или массив необходимо поместить в объект ссылочного класса перед его передачей в функцию, которая ожидает IInspectable. Этот процесс называют упаковкой значения. |
Использование интерфейсов API с помощью C++/WinRT | В этом разделе показано, как использовать интерфейсы API C++/WinRT, если они реализованы Windows, сторонним поставщиком компонентов или вами самостоятельно. |
Создание интерфейсов API с помощью C++/WinRT | В этом разделе показано, как создавать интерфейсы API C++/ WinRT, используя базовую структуру winrt::implements прямо или косвенно. |
Обработка ошибок в C++/WinRT | В этом разделе обсуждаются стратегии обработки ошибок при программировании на C++/WinRT. |
Обработка событий с помощью делегатов | В этом разделе показано, как регистрировать и отзывать делегаты обработки событий с помощью C++/WinRT. |
Создание событий | В этом разделе показано, как создать компонент среды выполнения Windows, который содержит класс среды выполнения, порождающий события. В нем также показано приложение, которое использует этот компонент и обрабатывает события. |
Использование коллекций с помощью C++/WinRT | C++/WinRT предоставляет функции и базовые классы, которые позволяют сэкономить много времени и усилий, если требуется реализовать и (или) передавать коллекции. |
Параллельная обработка и асинхронные операции | В этом разделе показаны способы, которыми можно создавать и использовать асинхронные объекты среды выполнения Windows с помощью C++/WinRT. |
Расширенные сценарии с параллелизмом и асинхронностью | Расширенные сценарии с параллелизмом и асинхронностью в C++/WinRT. |
Пример источника завершения | Показывает, как создать и использовать собственный исходный класс завершения. |
Элементы управления XAML; привязка к свойству C++/WinRT | Свойство, которое может быть эффективно привязано к элементу управления XAML, называется отслеживаемым. В этом разделе показано, как реализовать и использовать отслеживаемое свойство и привязать к нему элемент управления XAML. |
Элементы управления XAML; привязка к коллекции C++/WinRT | Коллекция, которая может быть эффективно привязана к элементам управления XAML, называется отслеживаемой. В этом разделе показано, как реализовать и использовать отслеживаемую коллекцию и привязать к ней элементы управления XAML. |
Создание пользовательских (на основе шаблона) элементов управления XAML с помощью C++/WinRT | В этом разделе рассматриваются этапы создания простого пользовательского элемента управления с помощью C++/WinRT. С помощью приведенной информации можно создавать собственные многофункциональные и настраиваемые элементы пользовательского интерфейса. |
Передача параметров в проецируемые API | C++/WinRT упрощает передачу параметров в проецируемые API, предоставляя автоматические преобразования для распространенных случаев. |
Использование компонентов COM с помощью C++/WinRT | В этом разделе приведен полный пример кода Direct2D, чтобы показать, как использовать классы и интерфейсы COM с помощью C++/WinRT. |
Создание компонентов COM с помощью C++/WinRT | C++/WinRT можно использовать для разработки классических компонентов COM, так как эта проекция языка помогает создавать классы среды выполнения Windows. |
Переход на C++/WinRT из C++/CX | В этой статье описаны технические особенности переноса исходного кода из проекта C++/CX в его эквивалент в C++/WinRT. |
Взаимодействие между C++/WinRT и C++/CX | В этом разделе описаны две вспомогательные функции, которые могут использоваться для преобразования между объектами C++/CX и C++/WinRT. |
Асинхронное выполнение задач и взаимодействие между C++/WinRT и C++/CX | Это дополнительная статья, посвященная постепенному переходу с C++/CX на C++/WinRT. В ней показано, как задачи библиотеки параллельных шаблонов (PPL) и сопрограмм могут существовать параллельно в одном проекте. |
Переход на C++/WinRT с WRL | В этом разделе показано, как перенести код библиотеки шаблонов C++ для среды выполнения Windows (WRL) в его эквивалент на C++/WinRT. |
Перенос примера буфера обмена в C++/WinRT из C# (пример использования) | В этой статье рассматривается пример переноса одного примера приложения универсальной платформы Windows (UWP) из C# в C++/WinRT. Вы можете получить рекомендации и действия по переносу, следуя пошаговому руководству и выполняя перенос образца. |
Переход на C++/WinRT с C# | В этой статье указаны все технические особенности переноса исходного кода из проекта C# в его эквивалент в C++/WinRT. |
Взаимодействие между C++/WinRT и интерфейсом ABI | В этом разделе показано, как выполнять преобразование между объектами двоичного интерфейса приложений (ABI) и C++/WinRT. |
Сильные и слабые ссылки в C++/WinRT | Среда выполнения Windows — это система с учетом ссылок. В подобной системе очень важно знать о значении сильных и слабых ссылок, а также о различиях между ними. |
Гибкие объекты | Гибкий объект — это объект, доступ к которому может осуществляться из любого потока. Типы C++/WinRT являются гибкими по умолчанию, но вы можете это отключить. |
Диагностика прямых выделений | В этом разделе подробно описывается компонент C++/WinRT 2.0. Вы можете использовать его для диагностики неполадок с созданием объекта типа реализации в стеке вместо семейства вспомогательных методов winrt::make. |
Точки расширения для типов реализации | Эти точки расширения в C++/WinRT 2.0 позволяют откладывать уничтожение типов реализации, чтобы безопасно выполнять запросы во время уничтожения, а также обрабатывать вход в проектируемые методы и выход из них. |
Базовый пример библиотеки пользовательского интерфейса Windows 2 для C++/WinRT (UWP) | Из этого раздела вы узнаете, как включить базовую поддержку библиотеки пользовательского интерфейса Windows (WinUI) в проекте C++/WinRT UWP. В частности, в этом разделе рассматривается библиотека WinUI 2, которая предназначена для приложений UWP. |
Создание компонентов среды выполнения Windows с помощью C++/WinRT | В этом разделе показано, как с помощью C++/WinRT можно создать и использовать компонент среды выполнения Windows, который можно вызвать из универсального приложения для Windows, созданного с помощью любого языка среды выполнения Windows. |
Создание компонента среда выполнения Windows C# для использования из приложения C++/WinRT | В этом разделе описывается процесс добавления простого компонента C# в ваш проект C++/WinRT |
Нативная визуализация отладки (natvis) Visual Studio для C++/WinRT | Расширение C++/WinRT для Visual Studio (VSIX) позволяет выполнять нативную визуализацию отладки (natvis) Visual Studio для проектируемых типов C++/WinRT. Это обеспечивает возможности, аналогичные отладке C#. |
Макросы конфигурации | В этом разделе содержатся сведения о макросах конфигурации C++/WinRT. |
Соглашения об именовании для C++/WinRT | В этом разделе приводятся соглашения об именовании, принятые для C++/WinRT. |
Разделы о языке C++
Раздел | Описание |
---|---|
Категории значений и ссылки на них | В этом разделе описываются различные категории значений, которые существуют в C++. Вы наверняка уже слышали о значениях lvalue и rvalue, но существуют и другие типы. |