Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memuatkan dan Menjemput Kaedah daripada DLL pada Runtime dalam C#?

Bagaimanakah Saya Boleh Memuatkan dan Menjemput Kaedah daripada DLL pada Runtime dalam C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-14 10:00:00432semak imbas

How Can I Load and Invoke Methods from DLLs at Runtime in C#?

Penjelasan terperinci tentang memuatkan dan memanggil kaedah DLL secara dinamik semasa masa jalan C#

Dalam pembangunan aplikasi C#, selalunya perlu memuatkan perpustakaan luaran (.DLL) secara dinamik untuk melanjutkan fungsi. Artikel ini akan menerangkan secara terperinci langkah-langkah memuatkan DLL semasa runtime dan menyelesaikan masalah biasa kerana tidak dapat memanggil kaedah secara langsung selepas memuatkan.

Gunakan Assembly.LoadFile() untuk memuatkan DLL

Kaedah

Assembly.LoadFile() digunakan untuk memuatkan DLL ke dalam memori aplikasi, dengan itu mengakses jenis dan kaedah yang ditakrifkan dalam DLL. Contohnya:

<code class="language-csharp">var DLL = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");</code>

Dalam contoh ini, fail DLL dimuatkan ke dalam memori dan diberikan kepada pembolehubah bernama 'DLL'.

Dari LoadFile() kepada panggilan kaedah

Selepas memuatkan DLL, langkah seterusnya ialah mencipta contoh kelas sasaran dan memanggil kaedahnya. Perlu diingatkan bahawa C# perlu mengetahui kewujudan kaedah pada masa penyusunan untuk memanggilnya secara langsung. Jika kelas dan kaedah tidak diketahui pada masa penyusunan, pendekatan lain mesti diambil.

Gunakan refleksi untuk memanggil kaedah

Refleksi membolehkan pemeriksaan dinamik dan manipulasi pemasangan pada masa jalankan. Langkah-langkah untuk memanggil kaedah menggunakan refleksi adalah seperti berikut:

  1. Dapatkan jenis: Gunakan kaedah GetExportedTypes() untuk mendapatkan tatasusunan jenis yang dieksport oleh DLL.
  2. Buat tika: Gunakan kaedah Activator.CreateInstance() untuk mencipta tika kelas sasaran.
  3. Kaedah panggilan: Gunakan kaedah InvokeMember() untuk memanggil kaedah sasaran pada tika.
<code class="language-csharp">foreach(Type type in DLL.GetExportedTypes())
{
    var c = Activator.CreateInstance(type);
    type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] {@"Hello"});
}</code>

Kaedah panggilan menggunakan objek dinamik (.NET 4.0 dan ke atas sahaja)

Dalam .NET 4.0 dan ke atas, anda boleh menggunakan objek dinamik untuk memanggil kaedah secara dinamik pada kejadian untuk memudahkan proses di atas:

<code class="language-csharp">foreach(Type type in DLL.GetExportedTypes())
{
    dynamic c = Activator.CreateInstance(type);
    c.Output(@"Hello");
}</code>

Menggunakan mana-mana kaedah di atas, anda boleh berjaya memanggil kaedah dalam DLL yang dimuatkan pada masa jalan dan melanjutkan kefungsian aplikasi C#.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memuatkan dan Menjemput Kaedah daripada DLL pada Runtime dalam 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