PInvoke 库
PInvoke Libraries
我在网上看到很多使用 PInvoke 执行低级平台特定操作的示例,但它们每次都使用基本相同的方法原型。然后,查看 Microsoft Reference Source,每个程序集都定义了程序集需要的所有 PInvoke 函数,并始终将 类 标记为内部。我的问题是 "Why?"。
为什么在我们尝试重用尽可能多的代码的世界中,我们必须为每个需要它的项目重写 CreateFile 的签名?编写几个标准化的 WinAPI 库有什么问题?我假设有一些问题,因为大部分都没有完成,或者项目很快就被放弃了。
内部标记是设计使然,他们不希望这些声明暴露给外部程序集。
.NET 框架旨在环绕 Win32 API,因此用户无需直接使用它们,但它们可以处理更高级别的抽象。如果他们暴露下面的 API,我认为它不是一个很好的抽象层设计。几层之后它会在下面暴露太多功能。
我认为问题在于封装和可重用性之间。封装确实降低了复用性,但是提高了可维护性。
将这些 p/invoke 签名标记为内部的程序集这样做是因为它们的目的是提供更高级别的抽象。并且在许多情况下是跨平台的(包括 P/Invoke 方法不存在的平台)。将它们设为内部可确保调用者专注于适用于任何地方的更高级别的抽象。
Why, in a world where we're trying to reuse as much code as possible, do we have to rewrite the signature for CreateFile for every project we need it in? What are the issues with writing a couple of standardized WinAPI libraries?
这样的库可能会因元数据而变得相当大,并且该库的大多数用户可能只需要它包含的一小部分内容。但由于我对代码重用和 p/invoke 签名的可靠来源表示同情,我开始了 P/Invoke library on GitHub 这意味着包括所有你可能想要的 P/Invoke 签名(至少来自 Win32 ).它有点像 pinvoke.net,除了代码总是编译,你可以通过 nuget 包使用它。
我希望你发现它对你正在尝试做的事情有用。
我在网上看到很多使用 PInvoke 执行低级平台特定操作的示例,但它们每次都使用基本相同的方法原型。然后,查看 Microsoft Reference Source,每个程序集都定义了程序集需要的所有 PInvoke 函数,并始终将 类 标记为内部。我的问题是 "Why?"。
为什么在我们尝试重用尽可能多的代码的世界中,我们必须为每个需要它的项目重写 CreateFile 的签名?编写几个标准化的 WinAPI 库有什么问题?我假设有一些问题,因为大部分都没有完成,或者项目很快就被放弃了。
内部标记是设计使然,他们不希望这些声明暴露给外部程序集。
.NET 框架旨在环绕 Win32 API,因此用户无需直接使用它们,但它们可以处理更高级别的抽象。如果他们暴露下面的 API,我认为它不是一个很好的抽象层设计。几层之后它会在下面暴露太多功能。
我认为问题在于封装和可重用性之间。封装确实降低了复用性,但是提高了可维护性。
将这些 p/invoke 签名标记为内部的程序集这样做是因为它们的目的是提供更高级别的抽象。并且在许多情况下是跨平台的(包括 P/Invoke 方法不存在的平台)。将它们设为内部可确保调用者专注于适用于任何地方的更高级别的抽象。
Why, in a world where we're trying to reuse as much code as possible, do we have to rewrite the signature for CreateFile for every project we need it in? What are the issues with writing a couple of standardized WinAPI libraries?
这样的库可能会因元数据而变得相当大,并且该库的大多数用户可能只需要它包含的一小部分内容。但由于我对代码重用和 p/invoke 签名的可靠来源表示同情,我开始了 P/Invoke library on GitHub 这意味着包括所有你可能想要的 P/Invoke 签名(至少来自 Win32 ).它有点像 pinvoke.net,除了代码总是编译,你可以通过 nuget 包使用它。 我希望你发现它对你正在尝试做的事情有用。