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
Libérer: 2025-01-14 10:00:00
original
467 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal