Win32 API 提供的功能并非所有语言和框架都支持。 在针对 Windows 进行开发时,开发人员经常调用 Win32 API 来访问此功能。
从历史上看,这需要手动重新定义 API 才能使其可访问,这是脆弱且容易出错的。 https://github.com/dotnet/pinvoke (.NET) 和 https://github.com/retep998/winapi-rs (Rust) 等社区项目承担了为以下项目提供强类型和经过验证的 API 签名的负担: 他们的框架,但项目是手动维护的,这很难维持,并且使得提供全面的 API 覆盖变得具有挑战性。
该项目旨在为 Win32 API 提供元数据,以便可以以更自动化的方式和更完整的 API 覆盖范围为所有语言和框架生成类似上述的惯用投影和项目。
原则:
- 提供尽可能广泛的 API 覆盖范围
- 保留原始 API 的名称,但在元数据中表达可以使它们更易于使用的附加信息。
- 将非特定类型(例如
uint
使用常量的类型)转换为显式枚举,以提高可用性和可发现性。保持枚举成员名称与原始常量名称一致,以保护 SEO。 - 将
HANDLE
和GDI
对象等 Win32 类型定义表达为强类型结构体。这些结构的定义包括如何处置资源(如CloseHandle
或DeleteObject
)。以特定于语言的方式使用这些信息取决于语言投影。例如,C# 投影可以使用SafeHandle
对象作为HANDLE
和GDI
对象。
评论