Maison >développement back-end >C++ >Comment puis-je charger et appeler des méthodes à partir de DLL lors de l'exécution en C# ?
Explication détaillée du chargement et de l'appel dynamiques des méthodes DLL pendant l'exécution C#
Dans le développement d'applications C#, il est souvent nécessaire de charger dynamiquement des bibliothèques externes (.DLL) pour étendre les fonctions. Cet article expliquera en détail les étapes de chargement d'une DLL au moment de l'exécution et résoudra le problème courant de l'impossibilité d'appeler des méthodes directement après le chargement.
Utilisez Assembly.LoadFile() pour charger la DLL
La méthodeAssembly.LoadFile()
permet de charger la DLL dans la mémoire de l'application, accédant ainsi aux types et méthodes définis dans la DLL. Par exemple :
<code class="language-csharp">var DLL = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");</code>
Dans cet exemple, le fichier DLL est chargé en mémoire et affecté à une variable nommée 'DLL'.
De LoadFile() à l'appel de méthode
Après avoir chargé la DLL, l'étape suivante consiste à créer une instance de la classe cible et à appeler ses méthodes. Il est à noter que C# a besoin de connaître l'existence de la méthode au moment de la compilation pour pouvoir l'appeler directement. Si la classe et la méthode ne sont pas connues au moment de la compilation, une autre approche doit être adoptée.
Utiliser la réflexion pour appeler des méthodes
Reflection permet une inspection et une manipulation dynamiques des assemblages au moment de l'exécution. Les étapes pour appeler une méthode par réflexion sont les suivantes :
GetExportedTypes()
pour obtenir le tableau de types exporté par la DLL. Activator.CreateInstance()
pour créer une instance de la classe cible. InvokeMember()
pour appeler une méthode cible sur une instance. <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>
Appeler des méthodes à l'aide d'objets dynamiques (.NET 4.0 et supérieur uniquement)
Dans .NET 4.0 et versions ultérieures, vous pouvez utiliser des objets dynamiques pour appeler dynamiquement des méthodes sur des instances afin de simplifier le processus ci-dessus :
<code class="language-csharp">foreach(Type type in DLL.GetExportedTypes()) { dynamic c = Activator.CreateInstance(type); c.Output(@"Hello"); }</code>
En utilisant l'une des méthodes ci-dessus, vous pouvez appeler avec succès des méthodes dans la DLL chargée au moment de l'exécution et étendre les fonctionnalités de l'application C#.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!