Главная » C#, Windows Runtime, XAML, Разработка для Windows 8 » Windows Runtime (WinRT)

0

Итак, Windows Runtime представляет собой нативный программный интерфейс для построения приложений Metro. Несмотря на то что программный интерфейс является нативным, он полностью объектно-ориентированный и поддерживает следующие наборы классов.

 в Windows Runtime выделяют несколько основных блоков.

·                   Базовый набор  классов  —  тут  собрано все  по  работе с  потоками, управлением памятью, ресурсами и аутентификацией приложения. Сюда же можно отнести и определение базовых типов.

·                   Работа  с  файлами  мультимедиа  —  тут  представлены   механизмы по работе с аудио и видео.

·                   Службы и данные — сюда входят классы, обеспечивающие возможность взаимодействия с удаленными службами, а также  классы по обработке данных.

·                   Устройство    —    тут    присутствует    набор    типов,     позволяющих взаимодействовать  с  устройством  пользователя,   включая  различные сенсоры, такие как акселерометр.

·                   Пользовательский  интерфейс  —  самый  интересный  блок,  который содержит    основные    компоненты    построения     интерфейсов.    Тут

присутствуют    как    классы,    описывающие    стандартные    элементы управления, так и механизмы связывания с данными.

Все эти компоненты мы будем рассматривать очень подробно на протяжении всей книги.

Еще  раз  сделаем  акцент  на  том,  что  Windows Runtime  представляет  собой нативный программный интерфейс. Естественно, чтобы реализовать поддержку подобного интерфейса в Windows 8, разработчиком пришлось сделать множество вещей с нуля: определить  наборы типов и механизмов описания различных конструкций,  к   которым  привык  современный  объектно-ориентированный разработчик (начиная со списков и заканчивая механизмами создания классов и интерфейсов); создать механизмы безопасности, ограничивающие возможности приложений  лишь  заявленным   списком  привилегий,  представленным  при установке; реализовать  механизм запуска приложений и  активации нужных классов в контексте приложения и многое другое. Для нас важно разобраться с теми возможностями, которые предлагает WinRT в своем наборе классов, и в том, каким образом взаимодействовать с WinRT.

Если Вы заинтересовались полным набором классов WinRT, то все  их  можно увидеть  в  реестре  операционной  системы,  перейдя  по   следующему  пути: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId

Рис. 1.6.

Как видно из рисунка, тут представлен не только идентификатор для  каждого класса, но и имя библиотеки в любимом многими каталоге  System32. Иными словами, WinRT действительно нативный и представлен набором динамических библиотек.

Вот тут возникает вопрос: а как же .NET Framework и какое место C# во всем этом?

Начнем с того, что вспомним, как из языка программирования C# можно было вызывать нативный (еще не объектно-ориентированный)  код — конечно же, с помощью атрибута DllImport. Этот атрибут  позволял указать имя метода, который Вы  планировали  использовать  в  C#,  и  имя  библиотеки. При  этом возникали проблемы преобразования типов, а код получался громоздким.

В случае с COM-компонентами Visual Studio успешно генерировал специальный прокси-класс, который позволял взаимодействовать с  COM из управляемого кода. Затея хоть и работала, но наблюдались  проблемы с преобразованием параметров в типы .NET Framework, а  также проблемы с самой разработкой (подключение, IntelliSense и др.).

Если же мы говорим о нативном интерфейсе Windows Runtime, то, в  отличие от Win 32 API и COM, он разрабатывался уже во время  существования .NET Framework и C#. Обратите внимание на классы WinRT, и Вы увидите совпадение практически во всем с классами  .NET  Framework. Это не случайность. Дело в том, что WinRT разрабатывался таким образом, чтобы с его помощью можно было удобно создавать приложения не только на C++, но и на C#. Фактически, он адаптировался для C#-разработчиков, и на WinRT  можно смотреть как на воплощение .NET Framework в ядре платформы, что является логичным шагом.

Но С#  —  это управляемый язык программирования, который  работает под управлением .NET Framework. Изменилось ли что-то в Windows 8?

Язык  программирования  C#,  как  и  раньше,  выполняется  в   управляемом окружении, и в своих управляемых приложениях Вы можете получать доступ к большинству классов .NET Framework, при этом используя и классы Windows Runtime.  Естественно, если  мы  говорим  о  классах  .NET  Framework, то  речь идет о некотором  подмножестве. Ведь в Windows 8 у приложения Metro нет необходимости получать доступ к старым элементам управления или событиям, связанным с работой окна в старых операционных системах. А вот потенциал LINQ полностью доступен в приложениях Metro как раз благодаря возможности программировать на C#. Полный список доступных .NET-классов в приложениях Metro можно посмотреть в документации.

Каким же образом происходит вызов нативных интерфейсов Windows Runtime из управляемого кода, если типы, используемые в .NET  Framework и в WinRT, отличаются?  Это  становится  возможным  благодаря  специальной  прослойке Language   Projection.   Она   представляет   собой   механизм   взаимодействия между WinRT и C#.  Проще говоря, под Language Projection можно понимать библиотеку   прокси-классов,  а  также  расширения  компилятора,  делающие разработку приложений на C# «нативной». Подобные прослойки  есть  и для других технологий. Например, для приложений, написанных на JavaScript/HTML 5,  существует  аналогичная  прослойка,  которая  включает  библиотеку  WinJS, позволяющую обращаться к WinRT из кода на JavaScript.

Таким   образом,   механизм,   обеспечивающий   работу   приложений   Metro,

написанных на языке программирования C#, можно описать следующим образом.

Приложение Metro (C#/XAML)

Language Projection

Common Language Runtime (CLR)

Windows Runtime

Рис. 1.7.

И еще один момент, на котором хотелось бы акцентировать  внимание, это метаданные.  Дело  в  том,  что  одним  из  достоинств   .NET  Framework  была возможность хранить метаданные в сборках,  позволяющих описать не только структуру входящих в них классов,  но и различные зависимости. Подобные метаданные могли гарантировать целостность приложения, а также обеспечить дополнительные  возможности,  такие  как  система  IntelliSense.  Но,   как  Вы знаете, в стандартных динамических библиотеках Windows  нет возможности хранить  метаданные.  Однако  это  не  остановило  разработчиков,  и  сегодня все классы в библиотеках WinRT имеют  полное описание, аналогичное тому, которое применялось для  сборок  в .NET Framework (не просто аналогичное, а базирующееся на структуре метаданных в .NET). Правда, для библиотек WInRT метаданные  хранятся в отдельном файле от библиотеки, но в  определенном месте — каталоге C:\Windows\System32\WinMetadata. Тут располагаются файлы с расширением .winmd, являющиеся неотъемлемой частью WinRT.

Рис. 1.8.

Более того, если Вы попробуете открыть один из файлов с помощью стандартной утилиты ildasm, то сможете просмотреть всю доступную информацию (она находится здесь: C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools).

Рис. 1.9.

Сергей Лутай, Сергей Байдачный, Windows 8 для C# разработчиков

По теме:

  • Комментарии