Maison > développement back-end > C++ > Comment puis-je charger et utiliser dynamiquement des méthodes à partir d'une DLL en C# au-delà de Assembly.LoadFile() ?

Comment puis-je charger et utiliser dynamiquement des méthodes à partir d'une DLL en C# au-delà de Assembly.LoadFile() ?

Susan Sarandon
Libérer: 2025-01-14 09:35:43
original
261 Les gens l'ont consulté

How Can I Dynamically Load and Use Methods from a DLL in C# Beyond Assembly.LoadFile()?

Chargement dynamique des DLL en C#

En C#, les développeurs doivent souvent charger dynamiquement des bibliothèques de liens dynamiques (DLL), en particulier lorsqu'ils utilisent des bibliothèques tierces ou des configurations d'exécution. Cet article vise à répondre aux questions fréquemment posées sur les limites de l'utilisation de la méthode Assembly.LoadFile() et à fournir une solution basée sur la réflexion et les objets dynamiques.

Limitations de Assembly.LoadFile()

Comme mentionné dans la question, l'utilisation de Assembly.LoadFile() charge avec succès la DLL et permet de récupérer des informations telles que le nom de la classe. Cependant, il peut ne pas être possible d'appeler directement des méthodes dans une DLL chargée.

La réflexion comme solution

Pour surmonter cette limitation, les développeurs peuvent utiliser la réflexion, qui permet l'invocation dynamique de méthodes et d'objets d'opération au moment de l'exécution. Pour ce faire :

  1. Récupérer l'objet Type de la classe : var type = DLL.GetExportedTypes().FirstOrDefault();

  2. Créer une instance d'une classe : var c = Activator.CreateInstance(type);

  3. Utilisez la méthode InvokeMember() pour appeler la méthode cible :

    <code class="language-csharp"> type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] { "Hello" });</code>
    Copier après la connexion

Objets dynamiques dans .NET 4.0

Pour les applications ciblant .NET 4.0 ou supérieur, le mot-clé dynamique peut simplifier davantage ce processus. En utilisant cette approche, vous pouvez accéder directement aux membres sans réflexion de type :

<code class="language-csharp">dynamic c = Activator.CreateInstance(type);
c.Output("Hello");</code>
Copier après la connexion

Conclusion

Pour résumer, bien que Assembly.LoadFile() permette de charger une DLL, des objets de réflexion ou dynamiques sont nécessaires pour appeler les méthodes dans le module chargé. En fonction des exigences de l'application, les deux méthodes fournissent des solutions viables pour charger et utiliser dynamiquement des DLL lors de l'exécution en 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