Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengakses Kaedah Dalam DLL yang Dimuatkan Secara Dinamik dalam Aplikasi Konsol C#?

Bagaimanakah Saya Boleh Mengakses Kaedah Dalam DLL yang Dimuatkan Secara Dinamik dalam Aplikasi Konsol C#?

Barbara Streisand
Lepaskan: 2025-01-14 10:44:51
asal
548 orang telah melayarinya

How Can I Access Methods Within a Dynamically Loaded DLL in a C# Console Application?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan