Fungsi panggilan daripada perpustakaan kongsi C (DLL) dalam kod C# selalunya diperlukan untuk tujuan saling kendali. Walau bagaimanapun, apabila fungsi C tergolong dalam kelas yang menggunakan pembolehubah ahli persendirian, secara langsung membuat contoh kelas tersebut dalam kod C# menjadi mustahil.
Penyelesaian Menggunakan Indirect P/Invoke
Penyelesaian terletak pada pendekatan P/Invoke tidak langsung. Ini melibatkan penciptaan fungsi bukan ahli di luar kelas C yang memanggil fungsi ahli kelas.
Buat Fungsi Bukan Ahli
Untuk setiap fungsi ahli dalam kelas C, buat fungsi "C" luaran yang memanggil fungsi ahli. Ini membolehkan anda mengakses pembolehubah ahli persendirian secara tidak langsung.
Buat Kelas Pembungkus dalam C#
Setelah fungsi bukan ahli ini ditakrifkan dalam C DLL, anda boleh buat kelas pembalut dalam C# untuk berinteraksi dengan mereka. Kelas pembalut ini akan mengurus IntPtr janggal yang dihantar antara dua platform dan menyediakan antara muka yang lebih boleh digunakan.
P/Invoke Fungsi Kelas Wrapper
Dalam kelas pembalut C# , anda boleh P/Invoke fungsi bukan ahli yang dicipta dalam C DLL. Fungsi ini seterusnya akan memanggil fungsi ahli yang sesuai, memberikan anda akses kepada kefungsian kelas C.
Batasan dan Pengesyoran
Kelemahan pendekatan ini ialah keperluan untuk menguruskan IntPtr, yang boleh menyusahkan. Untuk meningkatkan kebolehgunaan, pertimbangkan untuk mencipta antara muka C# yang mencerminkan kefungsian kelas C. Laksanakan antara muka C# dalam kelas pembalut yang mewakilkan panggilan fungsi kepada fungsi P/Invoke. Pendekatan ini menghapuskan keperluan untuk mengurus IntPtr secara manual dan menyediakan model pengaturcaraan yang lebih bersih.
Pilihan Alternatif
Jika anda tidak mempunyai akses kepada kod C asal, anda boleh membuat DLL baharu yang membalut DLL asal dan menyediakan lapisan P/Invoke. Ini membolehkan anda mengakses kelas C secara tidak langsung tanpa mengubah suai pelaksanaan DLL asal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Kelas C daripada Kod C# Apabila Pembolehubah Ahli Persendirian Terlibat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!