Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengakses Kelas C daripada C# Menggunakan Integrasi DLL?

Bagaimanakah Saya Boleh Mengakses Kelas C daripada C# Menggunakan Integrasi DLL?

Mary-Kate Olsen
Lepaskan: 2025-01-01 14:23:09
asal
799 orang telah melayarinya

How Can I Access C   Classes from C# Using DLL Integration?

Mengakses Kelas C dalam Kod C# melalui Penyepaduan DLL

Apabila menyepadukan kod C# dengan DLL C yang sedia ada, mengakses kelas yang ditakrifkan dalam DLL boleh memberikan cabaran. Walaupun P/Invoke membenarkan anda untuk antara muka dengan fungsi dalam DLL, ia tidak secara semula jadi menyokong kelas mengakses.

Untuk mengatasi had ini, anda boleh menggunakan pendekatan P/Invoke tidak langsung. Ini melibatkan penciptaan fungsi bukan ahli untuk setiap fungsi ahli kelas sasaran yang membungkus panggilan fungsi ahli.

Sebagai contoh, pertimbangkan kelas C Foo dengan Bar fungsi ahli():

class Foo {
public:
  int Bar();
};
Salin selepas log masuk

Untuk mengakses Foo dalam C#, anda akan mencipta tiga fungsi luaran:

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

Dalam C#, fungsi ini boleh P/Invoked:

[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

Walaupun pendekatan ini menyediakan akses kepada kelas C, pendekatan ini memperkenalkan IntPtr legap yang mesti anda uruskan. Untuk mencipta antara muka yang lebih mesra pengguna, anda boleh mencipta kelas pembalut C# di sekeliling penuding ini, merangkum operasi yang diperlukan.

Walaupun anda tidak mempunyai akses terus kepada kod C, anda masih boleh mencipta kod berasingan DLL yang membalut DLL asal, menyediakan lapisan P/Invoke dan mendedahkan antara muka yang lebih sesuai untuk kod C#.

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

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