Pemuatan dinamik DLL dalam C#
C# membenarkan DLL dimuatkan dan digunakan secara dinamik pada masa jalan. Kaedah Assembly.LoadFile()
membenarkan memuatkan DLL ke dalam aplikasi.
Masalah: Tidak dapat menggunakan kaedah daripada DLL yang dimuatkan dalam aplikasi konsol
Pengguna melaporkan boleh memuatkan DLL tetapi tidak dapat mengakses kaedahnya. Ini kerana pengkompil C# tidak boleh pra-menyelesaikan jenis dan ahli dalam DLL. Untuk memanggil kaedah dalam DLL, anda perlu menggunakan pantulan atau objek dinamik.
Penyelesaian 1: Gunakan Refleksi
Refleksi membolehkan mendapatkan jenis metadata dan memanggil ahlinya pada masa jalan. Menggunakan refleksi memerlukan secara eksplisit memanggil kaedah:
<code class="language-csharp">// 加载 DLL var assembly = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll"); // 遍历 DLL 中导出的类型 foreach (Type type in assembly.GetExportedTypes()) { // 创建类型实例 var instance = Activator.CreateInstance(type); // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数) type.InvokeMember("Output", BindingFlags.InvokeMethod, null, instance, new object[] { "Hello" }); }</code>
Penyelesaian 2: Gunakan objek dinamik (.NET 4.0 dan ke atas)
Objek dinamik membenarkan panggilan kaedah DLL dalam kod tanpa penukaran jenis eksplisit dan dengan sintaks yang lebih mudah:
<code class="language-csharp">// 加载 DLL var assembly = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll"); // 遍历 DLL 中导出的类型 foreach (Type type in assembly.GetExportedTypes()) { // 创建动态实例 dynamic instance = Activator.CreateInstance(type); // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数) instance.Output("Hello"); }</code>
Kedua-dua penyelesaian menunjukkan cara mengakses kaedah secara dinamik dalam DLL. Kaedah yang anda pilih bergantung pada versi .NET dan pilihan peribadi anda. Refleksi menyediakan kawalan yang lebih halus, manakala objek dinamik memudahkan kod. Ambil perhatian bahawa @"C:visual studio 2012ProjectsConsoleApplication1ConsoleApplication1DLL.dll"
perlu diganti dengan laluan sebenar ke DLL anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Kaedah Dalam DLL yang Dimuatkan Secara Dinamik dalam Aplikasi Konsol C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!