為了實現互通性,通常需要在 C# 程式碼中從 C 共用程式庫 (DLL) 呼叫函數。但是,當 C 函數屬於使用私有成員變數的類別時,在 C# 程式碼中直接建立該類別的實例就變得不可能了。
使用間接 P/Invoke 的解法
解在於間接 P/Invoke 方法。這涉及到在 C 類外部創建呼叫類別成員函數的非成員函數。
建立非成員函數
對於 C 類別中的每個成員函數,建立一個呼叫成員函數的外部「C」函數。這允許您間接存取私有成員變數。
在C# 中建立包裝類別
一旦在C DLL 中定義了這些非成員函數,您就可以在C# 中建立一個包裝類別來與它們交互。這個包裝類別將管理兩個平台之間傳遞的尷尬的 IntPtr 並提供一個更可用的介面。
P/呼叫包裝類別函數
在 C# 包裝類別中,您可以 P/Invoke 在 C DLL 中建立的非成員函數。這些函數將依序呼叫適當的成員函數,從而授予您存取 C 類功能的權限。
限制和建議
這種方法的缺點是需要管理 IntPtr,這可能很麻煩。為了提高可用性,請考慮建立一個反映 C 類別功能的 C# 介面。在將函數呼叫委託給 P/Invoke 函數的包裝類別中實作 C# 介面。這種方法消除了手動管理 IntPtr 的需要,並提供了更清晰的程式設計模型。
替代選項
如果您無法存取原始 C 程式碼,您可以建立一個新的 DLL,它包裝原始 DLL 並提供 P/Invoke 層。這允許您間接存取 C 類,而無需修改原始 DLL 的實作。
以上是當涉及私有成員變數時,如何從C#程式碼存取C類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!