Heim >Backend-Entwicklung >C++ >Wie kann ich Methoden aus DLLs zur Laufzeit in C# laden und aufrufen?

Wie kann ich Methoden aus DLLs zur Laufzeit in C# laden und aufrufen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-14 10:00:00432Durchsuche

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

Detaillierte Erläuterung des dynamischen Ladens und Aufrufs von DLL-Methoden während der C#-Laufzeit

Bei der C#-Anwendungsentwicklung ist es oft notwendig, externe Bibliotheken (.DLL) dynamisch zu laden, um Funktionen zu erweitern. In diesem Artikel werden die Schritte zum Laden einer DLL zur Laufzeit ausführlich erläutert und das häufig auftretende Problem gelöst, dass Methoden direkt nach dem Laden nicht aufgerufen werden können.

Verwenden Sie Assembly.LoadFile(), um die DLL zu laden

Mit der Methode

Assembly.LoadFile() wird die DLL in den Anwendungsspeicher geladen und so auf die in der DLL definierten Typen und Methoden zugegriffen. Zum Beispiel:

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

In diesem Beispiel wird die DLL-Datei in den Speicher geladen und einer Variablen namens „DLL“ zugewiesen.

Von LoadFile() zum Methodenaufruf

Nach dem Laden der DLL besteht der nächste Schritt darin, eine Instanz der Zielklasse zu erstellen und deren Methoden aufzurufen. Es ist zu beachten, dass C# zum Zeitpunkt der Kompilierung die Existenz der Methode kennen muss, um sie direkt aufrufen zu können. Wenn die Klasse und die Methode zur Kompilierungszeit nicht bekannt sind, muss ein anderer Ansatz gewählt werden.

Verwenden Sie Reflektion, um Methoden aufzurufen

Reflection ermöglicht die dynamische Inspektion und Manipulation von Baugruppen zur Laufzeit. Die Schritte zum Aufrufen einer Methode mithilfe von Reflektion sind wie folgt:

  1. Typ abrufen: Verwenden Sie die Methode GetExportedTypes(), um das von der DLL exportierte Typarray abzurufen.
  2. Eine Instanz erstellen: Verwenden Sie die Methode Activator.CreateInstance(), um eine Instanz der Zielklasse zu erstellen.
  3. Aufrufmethode: Verwenden Sie die Methode InvokeMember(), um eine Zielmethode für eine Instanz aufzurufen.
<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>

Methoden mit dynamischen Objekten aufrufen (nur .NET 4.0 und höher)

In .NET 4.0 und höher können Sie dynamische Objekte verwenden, um Methoden für Instanzen dynamisch aufzurufen, um den obigen Prozess zu vereinfachen:

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

Mit einer der oben genannten Methoden können Sie erfolgreich Methoden in der zur Laufzeit geladenen DLL aufrufen und die Funktionalität der C#-Anwendung erweitern.

Das obige ist der detaillierte Inhalt vonWie kann ich Methoden aus DLLs zur Laufzeit in C# laden und aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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