Страницы

Поиск по вопросам

понедельник, 19 ноября 2018 г.

Что такое WinRT и с чем его едят?

Рихтер в своей книге целую главу посвятил данному механизму, но я так и не понял в каких сценариях его имеет смысл применять.
Это что-то типа убийцы COM, который нужно применять для межязыкового взаимодействия между управляемым модулем и неуправляемым? Или это вообще какая-то обертка над WinApi?


Ответ

На самом деле, WinRT не является заменой или оберткой для какой либо из предыдущих технологий. WinRT - это принципиально новая технология, направленная на разработку приложений, которые имеют смысл на разных типах устройств. Приложение WinRT может использовать базовый API и работать на всех типах устройств, или использовать расширения API и работать под набором конкретных устройств (например, под ПК и смартфоном, ПК и Xbox и т.п.)
Первоначально эта технология возникла под Windows 8 и называлась WinRT. Позднее в Windows 10 она была заменена на аналогичную технологию UWP, которая охватывает больший набор устройств. Сейчас можно приближенно считать, что это одно и то же.
Приложения UWP/WinRT обладают следующими особенностями:
Взаимодействие с ОС с помощью специального API Windows Runtime или ограниченного подмножества разрешенных API из Win32/COM и .NET Запуск в ограниченной среде, где приложения не имеют прямой доступ к оборудованию, реестру, всей файловой системе и т.п. WinRT приложения имеют доступ только к своей папке данных, а к другим папкам могут получать доступ с явного разрешения пользователя Распространение преимущественно через Магазин Windows, подобно распространению мобильных приложений, в противоположность обычному скачиванию инсталляторов с разных сайтов Разработка может осуществляться либо на С++ (с расширениями С++/CX для взаимодействия с компонентами WinRT), либо на .NET-языках Построение графического интерфейса с помощью XAML-фреймворка, похожего на WPF. В отличие от WPF, приложение строится не как набор окон, а как набор страниц, между которыми пользователь переходит внутри одного окна (как в веб-приложениях). Это позволяет создавать адаптивный интерфейс, имеющий смысл на разных типах устройств.
WinRT не является "убийцей COM", что бы это не значило. COM жив и будет жить, более того, сами компоненты WinRT API внутри представляют из себя COM-объекты. WinRT-приложения, написанные на С++, могут взаимодействовать с ними либо традиционно, как с COM-объектами, либо с использованием специальных расширений языка C++/CX.
WinRT не является "убийцей WinAPI", что бы это не значило. WinRT приложения, написанные на С++, могут как обычно взаимодействовать с подмножеством разрешенных Win32/COM API. Например, функция CreateFile будет доступна, а функции работы с реестром - нет. Конечно, это не позволяет обойти ограничения платформы, т.е. функция CreateFile также будет работать только с файлами в разрешенных папках. Забавный факт: в WinRT нельзя этой функцией открыть устройство NUL, как следствие - код, написанный из предположения, что оно всегда доступно, сломается при портировании под WinRT
WinRT не является средством для организации взаимодействия между управляемым и неуправляемым кодом (в целом). Тем не менее, расширения языка C++/CX предоставляют возможность организовать взаимодействие между кодом на стандартном С++ и компонентами WinRT.
Подробнее: Введение в работу с UWP приложениями

Комментариев нет:

Отправить комментарий