Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengakses Kelas C daripada C# Menggunakan P/Invoke?

Bagaimanakah Saya Boleh Mengakses Kelas C daripada C# Menggunakan P/Invoke?

Linda Hamilton
Lepaskan: 2025-01-05 02:42:38
asal
177 orang telah melayarinya

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

Mengakses Kelas C dalam Kod C# melalui DLL

Apabila berinteraksi dengan C DLL daripada kod C#, had timbul apabila cuba mengakses kelas secara terus ditakrifkan dalam DLL. Walaupun keupayaan P/Invoke untuk mendedahkan fungsi, fungsi dalam kelas bergantung pada pembolehubah ahli bukan statik, yang memerlukan penciptaan instance.

P/Invoke dan Akses Tidak Langsung

Sementara terus akses kelas tidak boleh dilaksanakan, P/Invoke boleh digunakan secara tidak langsung untuk mengakses ahli kelas. Pendekatan ini melibatkan penciptaan fungsi bukan ahli yang memanggil fungsi ahli kelas.

Kod Contoh

Pertimbangkan kod C berikut:

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; }
Salin selepas log masuk

Di sini, kod C mendedahkan kelas Foo melalui bukan ahli fungsi.

Pengantaramukaan C#

Dalam C#, P/Invoke boleh mengakses fungsi ini:

[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);
Salin selepas log masuk

Kod C# kini mesti mengurus nilai IntPtr, yang boleh dibalut dalam kelas pembalut untuk kemudahan.

Alternatif Pendekatan

Jika pemilikan langsung kod C tidak mungkin, DLL berasingan boleh dibuat untuk membalut DLL asal dan menyediakan lapisan P/Invoke, memudahkan interaksi kod C# dengan kelas C.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Kelas C daripada C# Menggunakan P/Invoke?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan