microsoft/win32metadata
GitHub: microsoft/win32metadata
提供Win32 API元数据生成工具,简化Windows系统开发。
Stars: 1478 | Forks: 143
# 概述
Win32 API 提供了并非所有语言和框架都自带的函数。在为 Windows 开发时,开发者通常会调用 Win32 API 来访问这些功能。
历史上,这需要手动 [重新定义 API](http://pinvoke.net/) 以使其可访问,这既脆弱又容易出错。像 https://github.com/dotnet/pinvoke (.NET) 和 https://github.com/retep998/winapi-rs (Rust) 这样的社区项目承担了为它们的框架提供强类型和验证过的 API 签名的重任,但这些项目是手动维护的,这很难持续进行,并且使得提供全面的 API 覆盖范围变得具有挑战性。
本项目旨在提供 Win32 API 的元数据,以便像上述项目一样的 idiomatic [投影](./docs/projections.md) 可以更自动化地、更全面地生成,适用于所有语言和框架。
要根据此元数据从您选择的语言调用 Win32 API,请使用以下 [语言投影](./docs/projections.md):
* C# - https://github.com/microsoft/cswin32 (Microsoft)
* Rust - https://github.com/microsoft/windows-rs (Microsoft)
* Beef - https://github.com/jayrulez/Win32-Beef (社区)
* D - https://github.com/rumbu13/windows-d (社区)
* Dart - https://github.com/halildurmus/win32 (社区)
* Python - https://github.com/ynkdir/py-win32more (社区)
* Zig - https://github.com/marlersoft/zigwin32 (社区)
* .NET Standard - https://github.com/Lamparter/Win32 (社区)
注意:社区项目在此列出是为了帮助发现,但它们不是由 Microsoft 官方验证的。
有关更多详细信息,请参阅 [路线图](./docs/roadmap.md) 和 [常见问题解答](./docs/faq.md)。
如果您想浏览元数据以查看我们生成的内容,请从 [Microsoft.Windows.SDK.Win32Metadata](https://www.nuget.org/packages/Microsoft.Windows.SDK.Win32Metadata/) NuGet 包中提取 Windows.Win32.winmd 并在 [ILSpy](https://github.com/icsharpcode/ILSpy/releases/latest)) 中加载 Windows.Win32.winmd。下载包并将其重命名为 .zip 以浏览和提取其内容。

# 原则
以下是一些指导我们生成的元数据的准则:
* 提供尽可能广泛的 API 覆盖范围
* 保持原始 API 的名称,但在元数据中表达额外的信息,使其更容易使用。
* 将像 `uint` 这样的非特定类型转换为显式的枚举,以提高可用性和可发现性。保持枚举成员名称与原始常量名称一致,以保留 SEO。
* 将 Win32 typedefs 如 `HANDLE` 和 `GDI` 对象表达为强类型 struct。这些 struct 的定义包括如何释放资源(如 `CloseHandle` 或 `DeleteObject`)。语言投影负责以特定于语言的方式使用这些信息。例如,C# 投影可以使用 `SafeHandle` 对象来处理 `HANDLE` 和 `GDI` 对象。
# 架构
请参阅 [ARCHITECTURE.md](docs/architecture.md).
# 投影
请参阅 [PROJECTIONS.md](docs/projections.md).
# 贡献
请参阅 [CONTRIBUTING.md](./CONTRIBUTING.md).
# 许可证
## 麻省理工学院
* 所有元数据程序集(例如 `Windows.Win32.winmd`)
* 本存储库和 [Microsoft.Windows.SDK.Win32Metadata NuGet 包](https://www.nuget.org/packages/Microsoft.Windows.SDK.Win32Metadata/) 中的所有工具
## Windows SDK
* 本存储库和上述 NuGet 包中的所有 Windows 标头(例如 RecompiledIdlHeaders)和接口定义语言 (IDL) 文件。
# 商标
本项目可能包含项目、产品或服务的商标或徽标。Microsoft 商标的授权使用必须遵守并遵循 Microsoft 的商标和品牌指南。在修改后的本项目中使用 Microsoft 商标或徽标不得引起混淆或暗示 Microsoft 的赞助。任何第三方商标或徽标的使用均受该第三方政策的约束。
标签:API Coverage, API Documentation, API Mapping, API Metadata, API Projection, API Refactoring, API Translation, API Validation, Automated API Generation, Beef, Community Projects, Cross-Language API, D, Dart, Developer Tools, Microsoft, .NET Standard, NuGet, Programming Language Integration, Python, Rust, Software Development, Strongly-Typed API, Win32 API, Windows SDK, Zig, 可视化界面, 多人体追踪, 无后门, 网络流量审计