簡體   English   中英

P調用庫

[英]PInvoke Libraries

我在網上看到了很多使用PInvoke進行底層平台特定操作的示例,但是它們每次都使用基本上相同的方法原型。 然后,查看Microsoft參考源,每個程序集定義程序集所需的所有PInvoke函數,並始終將這些類標記為內部類。 我的問題是“為什么?”。

為什么在一個我們試圖重用盡可能多的代碼的世界中,我們必須為每個需要它的項目重寫CreateFile的簽名? 編寫幾個標准化WinAPI庫有什么問題? 我認為存在一些問題,因為在大多數情況下還沒有完成,或者項目很快就被放棄了。

將這些p / invoke簽名標記為內部的程序集之所以這樣做是因為它們的目的是提供更高級別的抽象。 並且在許多情況下是跨平台的(包括不存在P / Invoke方法的平台)。 將其設置為內部可確保調用者專注於可在任何地方使用的更高級別的抽象。

為什么在一個我們試圖重用盡可能多的代碼的世界中,我們必須為每個需要它的項目重寫CreateFile的簽名? 編寫幾個標准化WinAPI庫有什么問題?

這樣的庫可能會包含相當大的元數據,並且該庫的大多數用戶可能只需要它所包含內容的一小部分。 但是,由於我對代碼重用的渴望和可靠的p / invoke簽名來源感到同情,所以我在GitHub上啟動了P / Invoke庫,旨在包括您可能想要的所有P / Invoke簽名(至少來自Win32)。 類似於pinvoke.net,不同之處在於代碼始終會編譯,您可以通過nuget包使用它。 我希望您覺得它對您有所幫助,對您很有用。

內部的標記是設計使然,他們不希望這些聲明暴露給外部程序集。

.NET框架用於包裝Win32 API,因此用戶不需要直接使用它們,但是它們可以處理上面的抽象級別。 如果他們在下面公開API,我認為它不是抽象層的良好設計。 經過幾層之后,下面將公開太多功能。

我認為問題在於封裝和可重用性之間。 封裝確實降低了可重用性,但它提高了可維護性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM