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, но существуют и другие типы.

Важные API