Ответ 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 ++.