Heim >Backend-Entwicklung >C++ >Wie kann ich Methoden aus DLLs zur Laufzeit in C# laden und aufrufen?
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 MethodeAssembly.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:
GetExportedTypes()
, um das von der DLL exportierte Typarray abzurufen. Activator.CreateInstance()
, um eine Instanz der Zielklasse zu erstellen. 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!