Charge a.DLL les méthodes de fichier et d'accès de la classe?

je suis complètement nouveau à charger dans des bibliothèques comme celle-ci, mais voici où je me situe:

j'ai un fichier DLL maison c'est aussi simple que ça peut l'être, la classe elle-même et une méthode. Dans la maison programme qui se charge de cette bibliothèque, j'ai:

Assembly testDLL = Assembly.LoadFile("C:\dll\test.dll");

D'ici, je suis un peu coincé. Pour autant que je sache, il le charge correctement parce qu'il me donne des erreurs quand je change le nom.

Que dois-je faire à partir d'ici? Comment charger exactement la classe et les méthodes à l'intérieur de celui-ci?

Merci.

25
demandé sur Irshad 2009-07-06 20:03:00
la source

3 ответов

Utiliser Assembly.GetTypes() pour obtenir une collection de tous les types, ou Assembly.GetType(name) pour obtenir un type particulier.

vous pouvez alors créer une instance du type avec un constructeur sans paramètre en utilisant Activator.CreateInstance(type) ou obtenir les constructeurs à l'aide de Type.GetConstructors et les invoquer pour créer des instances.

de Même, vous pouvez obtenir des méthodes Type.GetMethods() etc.

fondamentalement, une fois que vous avez un type, il ya beaucoup de choses que vous pouvez faire - regardez le liste des membres pour en savoir plus information. Si vous êtes bloqué en essayant d'effectuer une tâche particulière (génériques peut être difficile) il suffit de poser une question spécifique et je suis sûr que nous serons en mesure d'aider.

32
répondu Jon Skeet 2009-07-06 20:12:13
la source

C'est comment vous pouvez obtenir les classes, si vous connaissez le type.

Assembly assembly = Assembly.LoadFrom("C:\dll\test.dll");

// Load the object
string fullTypeName = "MyNamespace.YourType";

YourType myType = assembly.CreateInstance(fullTypeName);

Le nom complet du type est important. Puisque vous n'êtes pas d'ajouter le .dll vous ne pouvez pas faire une utilisation parce qu'il n'est pas dans votre projet.

Si vous voulez tous, je voudrais juste Jon Skeet réponse.

11
répondu David Basarab 2009-07-06 20:15:39
la source

Si vous voulez dynamiquement chargez un assemblage, puis invoquez des méthodes à partir des classes qui s'y trouvent, vous devez effectuer une certaine forme d'invocation dynamique.

Case ici pour les conseils de base.

le seul morceau manquant est comment obtenir le type lui-même, qui peut facilement être récupéré code wth comme ceci:

foreach (Type t in assemblyToScan.GetTypes())
        {
            if(condition)
                //do stuff
        }

et si vous voulez simplement utiliser l'assemblage statiquement( en ayant l'assemblage disponible au moment de la compilation), alors le réponse FOM Launcy ici sur cette page est la voie à suivre.

3
répondu Kenan E. K. 2009-07-06 20:14:03
la source

Autres questions sur