Что такое C ++ / WinRT? - PullRequest
       37

Что такое C ++ / WinRT?

7 голосов
/ 02 февраля 2020

Я искал в Интернете. Я получаю , что :

C ++ / WinRT предоставляется в виде стандартной библиотеки файлов заголовков C ++ 17

Но что это на самом деле? Это новая объектно-ориентированная замена для старого Win32 API? Это замена фреймворка Qt на Windows? Является ли это сетевая библиотека (большинство примеров, кажется, о сети). Это GUI рамки? Это предпочтительный способ написания новых Windows приложений? Это замена печально известной библиотеки MF C?

Ответы [ 2 ]

10 голосов
/ 02 февраля 2020

C ++ / WinRT - языковая проекция для Windows Runtime (WinRT) API . Windows Runtime 1 - это базовая инфраструктура, используемая Windows для предоставления своих API. Предполагается, что он станет преемником плоского Win32 API на основе C (хотя вы можете использовать Windows Runtime и Windows API рядом).

C ++ / WinRT (например, любой другой языковой проект) переводит основанные на COM Windows Runtime-интерфейсы в естественные, идиоматические c языковые шаблоны, C ++ 'в случае C ++ / WinRT. В частности, он делает 3 вещи:

  • Он автоматизирует управление ресурсами COM-объектов путем привязки подсчета ссылок к временам жизни объектов интеллектуальных указателей.
  • Он преобразуется между отчетами об ошибках COM (на основе HRESULT возвращаемые значения) и отчеты об ошибках C ++ на основе исключений C ++.
  • Отображает асинхронные шаблоны Windows среды выполнения, основанные на сопрограммах IAsyncInfo, в C ++ 20.

Несколько новых технологий были опубликованы с использованием (тогда нового) Windows Runtime в качестве канала доставки. Наиболее очевидным из них является новая структура пользовательского интерфейса. Насколько мне известно, у этого до сих пор нет названия. Раньше go по именам "Метро" , "Современный пользовательский интерфейс" , "Свободный дизайн" . Последний термин, который я слышал, назывался "Windows Presentation Platform " . Он визуализируется с использованием Direct2D и обычно создается с использованием XAML.

Несмотря на то, что его часто сопоставляют с Windows Runtime, Windows Presentation Platform является просто клиентом технологии. Он не является частью самой среды выполнения Windows.

Другим важным моментом является то, что среда выполнения Windows не требует использования какой-либо конкретной библиотеки или инфраструктуры пользовательского интерфейса. Он одинаково хорошо работает в классическом c настольном приложении (написанном на прямом Win32, MF C, WTL, wxWidgets, ...) или. NET приложении (Windows Forms, WPF), как и в приложение с пользовательским интерфейсом XAML / Windows Presentation Platform.


1 Среда выполнения Windows предоставляется с помощью модернизированной версии COM. Компоненты могут использоваться и создаваться на самых разных языках. Компоненты кодируют свои интерфейсы publi c, используя ECMA-335 соответствующие метаданные (файлы .winmd). Сама технология не опирается на NET или CLR.

6 голосов
/ 03 февраля 2020

Ответ IInspectable на самом деле правильный, но может помочь и немного больший контекст ...

C ++ / CX (он же переключатель Visual C ++ /ZW), Windows Runtime Library (WRL), и C ++ / WinRT все делают в основном одно и то же: предоставляют механизм для вызова API-интерфейсов и типов в стиле "Windows Runtime" из C ++ и для создания API-интерфейсов и типов в стиле "Windows Runtime".

OP вопрос переходит к более фундаментальному вопросу: в чем смысл Windows API времени выполнения?

Оригинальный API Win32 был разработан для мира собственного кода, и большинство программ было написано на C или C ++. Компонентная объектная модель (COM) была создана как способ управления версиями во время выполнения (и многими другими функциями) с использованием того же самого базового интерфейса приложения (ABI). C ++ - более естественный способ использования COM, но вы все равно можете технически использовать C через различные макросы, а что нет.

. NET и другие управляемые языки появились позже, и использовать другой механизм вызова , Вы можете использовать встроенное взаимодействие для доступа к Win32 или COM API, но они, как правило, не работают "C# дружественным" способом. Были созданы различные «сборки-обертки», обеспечивающие более C# естественный способ доступа к базовым API и типам C / C ++.

С ростом Inte rnet и, в частности, Worldwide Web, еще один класс приложений написаны с использованием HTML5 + JavaScript. Они не имеют какого-либо специального c доступа к Win32 или COM API, поэтому специальные модули и библиотеки написаны для покрытия пробелов в функциональности.

SO с учетом всех трех основных подходов, Стиль "Windows Runtime" - это подход, который сочетает в себе функции COM с метаданными с высоким уровнем отражения. NET. Идея заключается в том, что API может быть написан один раз и использоваться для C ++, C# и HTML5 + JavaScript.

Конечно, есть много проблем с использованием API, помимо возможности вызова ABI, и каждая из этих языковых парадигм весьма различна, но с точки зрения системного программирования в этом все дело.

Существует также"Универсальная * платформа 1053 *", которая использует Windows API времени выполнения, которые сами имеют три базовые c «модели приложений»: XAML, DirectX и XAML + DirectX. Это приложения, которые могут интенсивно использовать C ++ / WinRT, если они написаны на C ++, но вы также можете использовать Windows API времени выполнения из настольных приложений Win32.

WRL действительно " ATL 2.0 "и была первой попыткой найти решение для взаимодействия C ++ с Windows API времени выполнения. Вы можете использовать его для использования и создания Windows типов времени выполнения, но это довольно много ручного труда и публично не документировано. Основной утилитой в настольных приложениях Win32 является смарт-указатель Microsoft::WRL::ComPtr.

Если вы хотите узнать, почему существует C ++ / CX, см. эту серию блогов . Предполагалось, что это будет простая в использовании модель для C ++, но часто она сопоставляется с Managed C ++ (она использует те же зарезервированные ключевые слова, но никак не связана с Managed C ++ или. NET) и не поддерживается другими

Если вы хотите узнать больше об общей причине C ++ / WinRT, см. статью MSDN Magazine . Предполагается, что это гораздо более дружественный к C ++ способ использования Windows API-интерфейсов среды выполнения, переносимый на другие компиляторы сторонних разработчиков и все чаще используемый как для внутренних, так и для внешних целей при разработке Windows среды выполнения. Он требует языковых возможностей C ++ 17 и поэтому сильно влияет на качество вашего компилятора C ++.

...