[Windows翻译]微软向C#和Rust开放旧的Win32 API,还将有更多语言加入其中。

437 阅读4分钟

原文地址:visualstudiomagazine.com/articles/20…

原文作者:visualstudiomagazine.com/forms/email…

发布时间:2021年1月21日

微软正在开放长期以来用于32位Windows编程的旧的Win32 API,让编码者使用他们选择的语言,而不是默认的C/C++选项或个别变通方法。

正如它的名字所暗示的那样,Win32是95年及以后版本的Windows的32位API。

虽然Win32 API以前可以用C/C++以外的其他语言来使用,但那需要变通方法--包装器或绑定--比如大家熟悉的C#的P/Invoke方案。然而,使用P/Invoke及其Rust对应的winapi-rs是很麻烦的,因为各个产品必须手动维护,很难保持持续的覆盖率。更重要的是,这样的方案并不能翻译成其他语言。

为了简化和自动化这个过程,微软今天(1月21日)推出了其win32metadata项目,以及几个初步的Win32语言预测。编程语言投射是一个子系统--不同的描述是一组包装器或适配器--它以目标语言自然和熟悉的方式促进使用平台(在本例中为Win32)的API进行开发。

元数据项目通过提供Win32 API表面的完整描述,使其可以自动投射到任何语言上,从而简化了语言投射的创建,微软表示,这提高了正确性,并最大限度地减少了维护。因此,这些元数据描述并不是为了让开发者直接消费,而是由开发者使用语言投影,而语言投影又会消费元数据,并将API投影到特定语言的自然模式中。

用C#/Win32通过PInvoke静态类调用CreateFile的动画动作(来源:微软)。

"Win32 API已经存在很长时间了,所以准确描述所有的API需要一些反复,"微软在一篇博客文章中说。"我们将以开放的方式开发这一工具,并欢迎社区做出贡献,以确保准确地表达Win32 API表面,使所有语言受益。"

同时,微软在预览版中介绍了两种初步的语言预测。

  • C#/Win32:"C#/Win32是与.NET的PInvoke项目所有者Andrew Arnott合作构建的,C#/Win32可以解析元数据,并生成调用你关心的API所需的P/Invoke包装器。"
  • Rust语言:"Rust语言投影继承了C++/WinRT建立的传统,即使用标准语言和编译器为Windows构建语言投影,为Rust开发者提供了一种自然而习惯的方式来调用Windows API。windows crate可以让你使用直接从元数据中飞速生成的代码调用任何Windows API,使你能够像调用另一个Rust模块一样调用API。"

展望未来,微软表示,它已经在开发Modern C++项目。该公司表示:"确实,Windows SDK已经发布了可以从C++中消耗的头文件,但这些头文件有一些严重的历史和兼容性限制,阻碍了希望享受现代语言特性的C++开发人员。"

该公司表示,在创建更多的语言预测时,将遵循这些原则。

  • 语言预测应该提供最大的API覆盖率
  • 语言投射应该在适当的地方提供API和类型的友好适应性。
  • 语言预测应提供来自官方文件的IntelliSense。
  • 语言投射应该支持根据项目目标的SDK版本过滤可用的API。
  • 语言预测应使开发人员能够针对一组特定的API,并链接或只包括为这些API提供支持所需的人工制品。

除了在预览中提供C#、C++和Rust的预测外,该项目路线图显示,Win32元数据包将在微软定于5月中旬举行的//BUILD 2021开发者大会期间,以预览的方式发布到NuGet.org,用于最新的Windows SDK版本。

关于作者

David Ramel是Converge360的编辑和作家。


通过www.DeepL.com/Translator(免费版)翻译