Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengakses Kelas C DLL dengan Pembolehubah Ahli dan Kaedah Bukan Statik daripada C#?
Masalah:
Menggunakan P/Invoke untuk mengakses fungsi dalam C DLL dengan pembolehubah ahli dan kaedah bukan statik memerlukan mencipta contoh kelas penentu. Bagaimanakah akses boleh diperolehi ke kelas ini?
Jawapan:
Menggunakan kelas C dalam C# tidak boleh dilakukan secara langsung. Sebaliknya, ikuti langkah berikut:
Contoh:
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; }
Dalam C#:
[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);
Kelas Pembungkus:
Untuk memudahkan penggunaan, balut penuding IntPtr ke dalam pembalut C# kelas:
public class FooWrapper { private IntPtr _foo; public FooWrapper() { _foo = Foo_Create(); } public int Bar() { return Foo_Bar(_foo); } public void Dispose() { Foo_Delete(_foo); } }
Pendekatan Alternatif:
Jika tidak dapat mengubah suai DLL asal, buat DLL perantaraan yang membalut DLL asal dan mendedahkan kelas yang dibalut kepada C# .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Kelas C DLL dengan Pembolehubah Ahli dan Kaedah Bukan Statik daripada C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!