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# ?

Comment puis-je charger et appeler des méthodes à partir de DLL lors de l'exécution en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-14 10:00:00432parcourir

How Can I Load and Invoke Methods from DLLs at Runtime in 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éthode

Assembly.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 :

  1. Get type : Utilisez la méthode GetExportedTypes() pour obtenir le tableau de types exporté par la DLL.
  2. Créer une instance : Utilisez la méthode Activator.CreateInstance() pour créer une instance de la classe cible.
  3. Méthode d'appel : Utilisez la méthode 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn