Microsoft упростила доступ к API Win32 для языков Rust и C#

0
3

Microsoft упростила доступ к API Win32 для языков Rust и C#

Компания Microsoft рассказала о проекте по упрощению взаимодействия с API Win32 для языков программирования Rust и С#. Проект получил название win32metadata и доступен для предварительного просмотра на Github.

Цель проекта win32metadata — полное описание Win32 API в метаданных, чтобы облегчить взаимодействие с API, повысить корректность и минимизировать затраты на обслуживание. Microsoft разработала файл метаданных Windows c полным описанием Win32 API, который совместим с ECMA-335 (winmd) и опубликовала на nuget.org.

Компания объяснила, что из-за объёма материалов API Win32 точное описание всех элементов займёт некоторое время.

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

C# / Win32

Эта проекция была создана в партнёрстве с Эндрю Арноттом, владельцем P/Invoke для .NET. Она анализирует метаданные и создаёт обёртки P/Invoke, которые требуются для вызова API. Для установки проекции необходимо:

  • Добавить ссылку на Microsoft.Windows.SDK.Win32Metadata от nuget.org;

  • Поместить файл NativeMethods.txt в корневую директорию проекта вместе со списком функций Win32, которые запланированы для проекта.

ЧИТАТЬ ТАКЖЕ:  В Android 11 уберут возможность выбора камеры в сторонних приложениях, останется только стандартная

Файл NativeMethods.txt поддерживает размещение функции в строке и подстановочные знаки, например, BCrypt.* для включения целых модулей.

После этого проекция C# / Win32 начнёт генерировать обёртки P/Invoke для запрашиваемых функций и всех их зависимостей.

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

Microsoft упростила доступ к API Win32 для языков Rust и C#

Rust

Языковая проекция для Rust унаследовала методы взаимодействия от C++/WinRT. Она даёт возможность вызывать любой Windows API через созданный на лету из метаданных код. По заверению разработчиков Microsoft, это создаёт иллюзию работы с обычными модулями Rust. Проекция не разделяет API по технологиям, а предоставляет общий способ вызова любого модуля, независимо от базовой технологии.

ЧИТАТЬ ТАКЖЕ:  Amazon отказалась от чипов NVIDIA в пользу собственных

Другие языки

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

API Win32 используется для прямого взаимодействия приложений с операционной системой, и он был создан для языка C. У Windows API соглашение о вызове отличается от cdecl, вместо этого он использует stdcall, что даёт возможность языкам программирования, которые способны вызывать эти функции и оперировать типами данных в исполняемых программах Windows, взаимодействовать с API.

ЧИТАТЬ ТАКЖЕ:  Глава Samsung получил 2,5 года за взятку

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

В дорожной карте Microsoft запланировала до конца 2021 года опубликовать полный пакет метаданных Win32 на портале nuget.org с управлением версиями для всех релизов Windows SDK, выпустить языковые проекции для C#, C++ и Rust, а также интегрировать .NET 5 в проекцию C#.

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь