C ++ / WinRT и более старые расширения языка C ++ / CX - это просто способы облегчения работы с интерфейсами Windows Runtime из C ++. Одним из ключевых конструктивных значений среды выполнения Windows является упрощение написания компонента, который можно проецировать на C ++, C # и JavaScript.
Если цель вашего компонента должна использоваться всеми этими языками (что сильно влияет на дизайн интерфейса), то имеет смысл создавать интерфейсы среды выполнения Windows для вашего кода. Клиенты вашего компонента / библиотеки могут свободно использовать любой метод, который они хотят использовать для ваших типов среды выполнения Windows: взаимодействие C ++ / WinRT, C ++ / CX, C # или JavaScript.
Что касается внутренней реализации, она больше зависит от вас. C ++ / WinRT поддерживает создание компонентов среды выполнения Windows, и если вы ищете «современный C ++» способ написания API-интерфейсов среды выполнения Windows, это хороший способ, если вы начинаете с нуля. Вы также можете использовать C ++ / CX или Windows Runtime Library (WRL), хотя WRL требует определенных усилий для синхронизации генерации MDL.
Авторские API с C ++ / WinRT
Пошаговое руководство. Создание компонента среды выполнения Windows в C ++ / CX и вызов его из JavaScript или C #
Библиотека времени выполнения Windows (WRL) (канал 9)
Если, с другой стороны, вы просто пишете библиотеку C ++, которую вы ожидаете использовать в приложениях C ++ UWP, просто создайте стандартную библиотеку C ++, которую могут использовать C ++ UWP или классические настольные приложения Win32 (что я делаю, например, в Набор инструментов DirectX ). Единственные требования, которые это предъявляет к вашей библиотеке, - это придерживаться поверхности Win32 API, доступной для приложений UWP. См. эту серию блогов для различных соображений здесь. В общем, вы можете использовать только конфигурацию вашего выходящего кода.
Если вы хотите поддерживать как собственные интерфейсы C ++, так и API-интерфейсы Windows Runtime для использования в C # / JavaScript, вы можете предоставить дополнительный компонент с собственными API-интерфейсами Windows Runtime (например, Win2D для Direct2D / DirectWrite / WIC).
Небольшое историческое отступление: WRL был первым решением для использования Windows Runtime API из C ++, но было сочтено, что его слишком сложно использовать для создания интерфейсов WinRT. Внутренние разработчики Microsoft все еще использовали WRL для разработки компонентов, но обычным разработчикам рекомендовалось использовать путь C ++ / CX. См. Внутри C ++ / CX Design . C ++ / CX заимствован из существующих «зарезервированных слов» из Managed C ++, который с меньшей вероятностью конфликтует с существующим кодом, но также действительно сбивает с толку людей, знакомых с Managed C ++.
C ++ / WinRT - более современное решение, которое дает гораздо более интуитивно понятную проекцию родного языка C ++ для типов среды выполнения Windows. Эта технология в значительной степени опирается на возможности языка C ++ 14 / ++ 17, которые находились в разработке в течение некоторого времени, поэтому полностью реализовать решение C ++ / WinRT в последнее время стало возможным. Использование асинхронных API-интерфейсов Windows Runtime интуитивно понятным родным способом C ++ требует использования сопрограмм, описанных в проекте C ++ 20. В целом, C ++ / WinRT - элегантное решение, но требует передовых технологий компиляции. См C ++ / WinRT