Microsoft делает Windows API более доступными


Microsoft опубликовала детали нового проекта, чтобы предоставить полное описание поверхности Win32 API в метаданных, чтобы ее можно было спроецировать на любой язык в автоматическом режиме.

Цель проекта win32metadata — предоставить автоматизированную альтернативу существующим проектам, таким как PInvoke для .NET и winapi-rs для Rust. Такие проекты были созданы для обеспечения доступа к API Win32, чтобы разработчики могли максимально использовать возможности Windows в приложениях. Хотя API Win32 легко доступны разработчикам на C и C ++, для других языков, таких как C # и Rust, для доступа к этим API требуются оболочки или привязки.

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

Microsoft заявляет, что из-за того, что эти сторонние проекты обслуживаются вручную, широкое и устойчивое покрытие API становится трудным и дорогостоящим. Вместо этого Microsoft предложила собственную альтернативу.

Цель проекта — предоставить полное описание поверхности Win32 API в метаданных, чтобы ее можно было автоматически проецировать на любой язык. В результате на Nuget.org публикуется совместимый с ECMA-335 файл метаданных Windows (winmd), содержащий метаданные, описывающие всю поверхность Win32 API.

Microsoft заявляет, что точное описание всех API Win32 потребует как времени, так и некоторых итераций. Чтобы сделать метаданные полезными, чтобы разработчики могли идиоматически вызывать API Win32 с языка по своему выбору, необходимы языковые проекции, построенные на их основе. Microsoft выбрала первый язык программирования — C # / Win32.

Этот проект был построен в партнерстве с Эндрю Арноттом, владельцем проекта PInvoke для .NET. C # / Win32 анализирует метаданные и генерирует оболочки P / Invoke, необходимые для вызова нужных API.

Чтобы использовать его, вы добавляете ссылку на пакет Microsoft.Windows.CsWin32 из NuGet.org и добавляете файл с именем NativeMethods.txt в корень вашего проекта со списком функций Win32, которые вы хотите вызвать. После заполнения C # / Win32 сгенерирует оболочки P / Invoke для запрашиваемых вами функций и всех их зависимостей.

Также существует языковая проекция Rust, которая позволяет вам вызывать любой Windows API, используя код, сгенерированный на лету, непосредственно из метаданных, поэтому вы можете вызывать API, как если бы они были просто еще одним модулем Rust.


Добавить комментарий