首頁 > 後端開發 > C++ > 如何使用 P/Invoke 從 C# 存取 C 類別?

如何使用 P/Invoke 從 C# 存取 C 類別?

Linda Hamilton
發布: 2025-01-05 02:42:38
原創
177 人瀏覽過

How Can I Access C   Classes from C# Using P/Invoke?

透過DLL 存取C# 程式碼中的C 類別

從C# 程式碼與C DLL 互動時,嘗試直接存取類別時會出現限制DLL 中定義。儘管 P/Invoke 能夠公開函數,但類別內的函數依賴非靜態成員變量,需要建立實例。

P/Invoke 和間接存取

直接存取時類存取不可行,可以利用 P/Invoke 間接存取類別成員。該方法涉及創建調用類別成員函數的非成員函數。

範例程式碼

考慮以下C 程式碼:

class Foo {
public:
  int Bar();
};

extern "C" Foo* Foo_Create() { return new Foo(); }
extern "C" int Foo_Bar(Foo* pFoo) { return pFoo->Bar(); }
extern "C" void Foo_Delete(Foo* pFoo) { delete pFoo; }
登入後複製

這裡,C程式碼透過非成員暴露了類Foo

C# 介面

在C#中,P/Invoke 可以存取這些函數:
[DllImport("Foo.dll")]
public static extern IntPtr Foo_Create();

[DllImport("Foo.dll")]
public static extern int Foo_Bar(IntPtr value);

[DllImport("Foo.dll")]
public static extern void Foo_Delete(IntPtr value);
登入後複製

C# 程式碼現在必須管理 IntPtr 值,可以將其包裝在包裝類別中方便。

替代方法

如果無法直接擁有C 程式碼,可以建立一個單獨的DLL 來包裝原始DLL 並提供P/Invoke層,簡化了C# 程式碼與C類的交互。

以上是如何使用 P/Invoke 從 C# 存取 C 類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板