微软正在开放长期用于32位Windows编程的旧Win32 API,允许编码人员使用他们选择的语言,而不是默认的C / C ++选项或单独的解决方法。
顾名思义,Win32是用于95及更高版本Windows版本的32位API。
尽管Win32 API以前可以在C / C ++之外的其他语言中使用,但这需要变通方法-包装程序或绑定-例如C#熟悉的P / Invoke方案。但是,使用P / Invoke及其Rust对应的winapi-rs很麻烦,因为必须手动维护各个产品,从而难以保持持续的覆盖范围。而且,这种方案不会翻译成其他语言。
为了简化和自动化该过程,Microsoft今天(1月21日)推出了win32metadata项目以及一些最初的Win32语言计划。编程语言投影是一个子系统-各种各样地描述为一组包装器或适配器-以目标语言的自然且熟悉的方式促进使用平台API(在本例中为Win32)的开发。
元数据项目通过提供Win32 API表面的完整描述,简化了语言投影的创建,因此可以自动将其投影为任何语言,微软表示,这种方法可以提高正确性并减少维护。因此,这些元数据描述不是要由开发人员直接使用的,开发人员而是将使用语言投影,而语言投影又会消耗元数据并将API投影到特定语言的自然模式中。
" Win32 API已经存在很长时间了,因此准确描述所有这些API将需要一些迭代,"微软在博客中表示。 "我们将在公开的欢迎社区中开发此工具,以确保Win32 API表面的准确表示,这将使所有语言受益。
C#/ Win32:"与.NET的PInvoke项目的所有者Andrew Arnott合作构建,C#/ Win32解析元数据并生成调用您所关注的API所需的P / Invoke包装器。 ;
Rust:" Rust语言投影遵循C ++ / WinRT建立的使用标准语言和编译器为Windows构建语言投影的传统,从而为Rust开发人员调用Windows API提供了自然而惯用的方式。 Windows板条箱使您可以直接使用由元数据直接生成的代码来调用任何Windows API,从而使您可以像调用其他API一样调用这些API。
展望未来,微软表示已经在进行Modern C ++投影。该公司表示,“确实,Windows SDK已经发布了可以从C ++使用的标头,但是这些标头具有一些严重的历史和兼容性限制,这妨碍了希望享受现代语言功能的C ++开发人员。”
语言投影应该支持基于项目目标的SDK版本过滤可用的API
语言投影应该使开发人员能够定位一组特定的API并进行链接或仅包含为这些API提供支持所必需的工件
除了在预览中提供C#,C ++和Rust投影之外,该项目的路线图还表明,在Microsoft // BUILD期间,Win32元数据包将以最新Windows SDK版本的预览版本发布到NuGet.org。 2021年开发者大会定于5月中旬。