Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Windows API otwiera się na kolejne języki programowania

Microsoft ogłosił, że pracuje nad umożliwieniem wywołań Windows API z większej liczby języków programowania, niż teraz.
Windows API otwiera się na kolejne języki programowania

Microsoft ogłosił jakiś czas temu, że zamierza otworzyć swoje Win32 API dla jeszcze większej liczby języków programowania. Jeśli chodzi o samo narzędzie, to udostępnia ono programistom dostęp do części systemu operacyjnego Microsoftu przez wywołania tego API. Według firmy z Redmond interfejsy te są już dostępne dla developerów korzystających z C oraz C++, ale inne języki, np. C#, czy Rust, potrzebują wrapperów lub połączeń, które im to umożliwią.

Przykładem takiego wrappera może być P/Invoke, który ma służyć developerom pracującym w .NET, oraz winapi-rs, który istnieje dla programistów Rusta. Projekty te, jak twierdzi Microsoft, są jednak ciężkie w utrzymaniu i nie dają żadnej korzyści innym językom. Dlatego więc firma z Redmond, chcąc odciążyć trochę społeczność open source, zaproponowała coś swojego.

Rezultatem jest projekt o nazwie win32metadata.


O projekcie

Jak pisze Microsoft, celem projektu jest dostarczenie kompletnego opisu powierzchni Win32 API w metadanych, tak aby można było dokonać projekcji na więcej języków programowania. Idealnie by było, aby tworzenie projekcji odbywało się w zautomatyzowany sposób, ulepszając zgodność z daną technologią oraz zmniejszając narzut wynikający z konieczności utrzymania. 

W efekcie powstał plik z metadanymi (winmd), który opisuje całą powierzchnię Win32 API. Spakowany plik pojawił się na NuGet.org, czyli menedżerze pakietów, umożliwiającym udostępnianie stamtąd kodu wielokrotnego użytku. 

Jak wspominaliśmy wcześniej, metadane umożliwią zbudowanie projekcji dla poszczególnych języków programowania. Według firmy z Redmond pierwszą projekcją jaka powstała jest już wczesny C#/Win32 - został on stworzony we współpracy z Andrew Arnottem - właścicielem projektu P/Invoke.


C#/Win32

C#/Win32 analizuje metadane i generuje wrappery, których wymaga się do wywołania odpowiednich API. Wystarczy dodać referencję do pakietu o nazwie Microsoft.Windows.CsWin32, który znajduje się obecnie na NuGet, i dodać do katalogu głównego projektu plik o nazwie NativeMethods.txt - posiada on listę funkcji Win32, które można wywoływać. 

Następnie C#/Win32 wygeneruje opakowania P/Invoke dla funkcji, dla których wysyłasz żądania.


Inne języki

Obecnie trwają prace nad projekcją Rusta. Użytkownicy będą mieli dostęp do Windows API bezpośrednio z poziomu kodu wygenerowanego przez metadane  - tak jakby to był po prostu kolejny moduł Rusta. Co więcej, Microsoft pracuje również nad projekcją dla nowoczesnego C++

Wszystkie powyższe projekty są w fazie rozwoju, także ich zawartość na GitHubie może ulec jeszcze zmianie. Niemniej jednak firma z Redmond zachęca społeczność do feedbacku i współpracy.


Podsumowanie

Publikacja pełnych wersji projekcji C#, C++ oraz Rusta planowana jest na koniec roku 2021. Prace nad resztą języków będą trwały dalej w 2022 roku, ale będzie to raczej praca podejmowana „według potrzeby”. 

Kompletną roadmapę projektu można znaleźć tutaj

Rozpocznij dyskusję

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej