Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengakses Kelas C daripada C# Menggunakan Integrasi DLL?
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(); };
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; }
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);
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!