101 votes

Chargement des DLL au moment de l'exécution en C#

J'essaie de comprendre comment on peut importer et utiliser une dll au moment de l'exécution dans une application C#. En utilisant Assembly.LoadFile(), j'ai réussi à faire en sorte que mon programme charge la dll (cette partie fonctionne sans aucun doute puisque je suis capable d'obtenir le nom de la classe avec ToString()), mais je suis incapable d'utiliser la méthode 'Output' à l'intérieur de mon application console. Je compile la dll, puis je la déplace dans le projet de ma console. Y a-t-il une étape supplémentaire entre CreateInstance et la possibilité d'utiliser les méthodes ?

C'est la classe dans ma DLL :

namespace DLL
{
    using System;

    public class Class1
    {
        public void Output(string s)
        {
            Console.WriteLine(s);
        }
    }
}

et voici l'application dans laquelle je veux charger la DLL

namespace ConsoleApplication1
{
    using System;
    using System.Reflection;

    class Program
    {
        static void Main(string[] args)
        {
            var DLL = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");

            foreach(Type type in DLL.GetExportedTypes())
            {
                var c = Activator.CreateInstance(type);
                c.Output(@"Hello");
            }

            Console.ReadLine();
        }
    }
}

-1voto

user1820796 Points 16

Ce n'est pas si difficile.

Vous pouvez inspecter les fonctions disponibles de l'objet chargé, et si vous trouvez celle que vous cherchez par son nom, vous pouvez fouiller dans ses paramètres attendus, le cas échéant. Si c'est l'appel que vous essayez de trouver, appelez-le en utilisant la méthode Invoke de l'objet MethodInfo.

Une autre option consiste à construire simplement vos objets externes en fonction d'une interface, et à convertir l'objet chargé en cette interface. En cas de succès, appelez la fonction en mode natif.

C'est assez simple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X