Cara Memanggil Perpustakaan C# daripada Native C Menggunakan IJW
Latar Belakang:
Timbul keperluan untuk mengintegrasikan C# perpustakaan ke dalam kod C yang tidak terurus. Antara kaedah yang tersedia, Interlace Services menggunakan C /CLI dan IJW (Saling kendali dengan JavaScript dan Windows Runtime) kelihatan menjanjikan.
Soalan:
-
Kelebihan IJW: Adakah IJW menawarkan apa-apa faedah berbanding objek com atau PInvoke?
-
Pembungkus C /CLR: Bagaimana anda boleh mencipta pembungkus C /CLR yang menggunakan IJW untuk memanggil Pustaka C#?
-
Integrasi C Asli: Bagaimanakah anda menyambungkan fail C yang tidak terurus dengan pustaka C /CLR?
Jawapan:
1. Kelebihan IJW berbanding Objek COM dan PInvoke:
- IJW memudahkan proses menghantar dan mendapatkan semula data antara kod terurus dan tidak terurus.
- Ia menghapuskan keperluan untuk marshaling manual dan penukaran data.
2. Mencipta Pembalut C /CLR dengan IJW:
-
Buat Kelas C /CLI baharu: Tambahkan kelas C /CLI pada projek anda dan namakannya dengan sewajarnya.
-
Dayakan Sokongan CLR: Klik kanan pada fail .cpp kelas baharu dan dayakan /clr dalam sifat projek.
-
Tambah Rujukan Ruang Nama: Gunakan sifat "Additional #using directories" untuk menambah rujukan kepada lokasi C# DLL anda.
3. Integrasi C Asli:
-
Sertakan Pengepala C /CLR: Dalam fail C yang tidak diurus, sertakan fail pengepala yang dijana oleh kelas pembalut C /CLR.
-
Buat Contoh Kelas Pembalut: Gunakan pembina kelas pembalut untuk membuat instantiate objek.
-
Kaedah Terurus Panggilan: Akses kaedah terurus bagi perpustakaan C# melalui objek kelas pembalut.
Kod Contoh:
Native.h:
void NativeWrapMethod();
Native.cpp:
#using "mscorlib.dll"
#using "MyNet.dll"
using namespace MyNetNameSpace;
void NativeWrapMethod()
{
MyNetNameSpace::MyManagedClass::Method(); // static method
}
Pendekatan ini membolehkan anda memanggil kelas C# terurus dan kaedahnya daripada kod C asli.
Atas ialah kandungan terperinci Bagaimana untuk Memanfaatkan IJW untuk Penyepaduan Perpustakaan C# yang Lancar dalam Native C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan: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