Heim > Backend-Entwicklung > C++ > Wie kann ich auf Methoden innerhalb einer dynamisch geladenen DLL in einer C#-Konsolenanwendung zugreifen?

Wie kann ich auf Methoden innerhalb einer dynamisch geladenen DLL in einer C#-Konsolenanwendung zugreifen?

Barbara Streisand
Freigeben: 2025-01-14 10:44:51
Original
548 Leute haben es durchsucht

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

Dynamisches Laden von DLL in C#

C# ermöglicht das dynamische Laden und Verwenden von DLLs zur Laufzeit. Die Methode Assembly.LoadFile() ermöglicht das Laden einer DLL in eine Anwendung.

Problem: Methoden aus einer geladenen DLL können nicht in einer Konsolenanwendung verwendet werden

Benutzer berichteten, dass sie die DLL laden, aber nicht auf ihre Methoden zugreifen konnten. Dies liegt daran, dass der C#-Compiler Typen und Member in der DLL nicht vorab auflösen kann. Um Methoden in einer DLL aufzurufen, müssen Sie Reflektion oder dynamische Objekte verwenden.

Lösung 1: Reflexion verwenden

Reflection ermöglicht das Abrufen von Typmetadaten und das Aufrufen seiner Mitglieder zur Laufzeit. Die Verwendung von Reflection erfordert den expliziten Aufruf der Methode:

<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>
Nach dem Login kopieren

Lösung 2: Verwenden Sie dynamische Objekte (.NET 4.0 und höher)

Dynamische Objekte ermöglichen den Aufruf von DLL-Methoden im Code ohne explizite Typkonvertierung und mit einer einfacheren Syntax:

<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>
Nach dem Login kopieren

Beide Lösungen zeigen, wie man dynamisch auf Methoden in einer DLL zugreift. Welche Methode Sie wählen, hängt von Ihrer .NET-Version und Ihren persönlichen Vorlieben ab. Reflection bietet eine feinere Kontrolle, während dynamische Objekte den Code vereinfachen. Beachten Sie, dass @"C:visual studio 2012ProjectsConsoleApplication1ConsoleApplication1DLL.dll" durch den tatsächlichen Pfad zu Ihrer DLL ersetzt werden muss.

Das obige ist der detaillierte Inhalt vonWie kann ich auf Methoden innerhalb einer dynamisch geladenen DLL in einer C#-Konsolenanwendung zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage