Microsoft makes Win32 APIs available to more languages

by Jeremy

Microsoft has expanded the scope of Win32 APIs beyond support for C and C++, with added support for C# and Rust-through the win32metadata project now available in preview on GitHub. Other languages will follow, according to the

Windows development team.  Previously, developers using languages other than C and C++ had to use wrappers or bindings to access these APIs, which increases the chances of an error and doesn’t scale to broad API coverage, according to Microsoft.  This has prompted several community projects to provide a more strongly typed and idiomatic representation of those wrappers and bindings to provide an improved developer experience, such as PInvoke.

NET and winapi-rs for Rust. However, since these projects are all manually maintained, the Windows SDK team said it started its version to take some of the burdens off of the community. The goal of the win32metadata project is to provide a complete description of the Win32 API surface in the metadata so that it can be projected to any language in an automated way, improving correctness and minimizing maintenance overhead,” the Windows SDK team wrote in a blog post.

The project is an ECMA-335 compliant Windows metadata file (wind) that was published to NuGet.org.

The first such language projection is C#/Win32, which parses the metadata and generates P/Invoke wrappers required to call APIs. Developers have to add a reference to Microsoft.Windows.CsWin32 package from NuGet.org and add the file NativeMethods.txt to the root of their project with a list of the Win32 functions that they want to call. 

“C#/Win32 provides rich Intellisense, strong types for parameters, and also includes the relevant documentation from docs.microsoft.com, all dynamically generated from metadata based on the APIs you request,” the Windows team explained. “No additional dependencies are required, broad API coverage is achieved with improved correctness and minimal maintenance overhead, and the APIs are expressed idiomatically as C# developers would expect.”

Related Posts

Leave a Comment