begin process at 2008 05 12 11:37:29
1 170 231 membres
133 nouveaux aujourd'hui
13 957 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CHARGEMENT D'ASSEMBLY AVEC VB 2005


Information sur le tutorial

Catégorie :Divers Tutorial .NET ( DotNet ) Date de création : 28/06/2007 17:39:13 Vu : 7 211 fois

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Ce tutorial va vous motrer comment charger dynamiquement des assembly .NET et d'exécuter leurs fonctions

Tutorial

Introduction

Je vais vous présenter ici comment charger des assembly dynamiquement à l'aide de VB 2005

Pré-requis

J'ai développé ce projet à l'aide de VB 2005 Express Edition.
Nous avons juste besoin du .NET Framework 2.0

I-Création de la DLL

Nous allons commencer par créer la DLL source. Elle contiendra une classe SayHello et une méthode DireBonjour.

Ouvrez Visual Basic 2005.Ensuite,sélectionnez l'option "Bibliothèque de classes" et nommez-la "HelloWorld".
Renommez "Class1.vb" en "SayHello.vb" et ouvrez ce fichier.

Maintenant tapez ceci:

Class SayHello

   Function DireBonjour()

         Return "Bonjour tout le monde"

   End Function

End Class

Sauvegardez le projet,compilez-le et copiez la DLL obtenue dans le répertoire C:\

II-Création du "consommateur de DLL"

Ici,nous allons créer l'application qui va utiliser dynamiquement la DLL crée.

Créez un nouveau projet,choisissez "Application console". Nommez le projet comme vous le souhaitez (Je l'ai appelé ConsoDll)
Ouvrez le fichier qui se présente dans l'explorateur de projets.
Ensuite,tapez ce code:

Imports System.Reflection
Imports System
Sub Main()
Dim TYP As TypeDim index, compte As Integer

Dim asm As Assembly
Dim obj as Object

'On charge l'assembly HelloWorld.dll contenue dans C:\(vous mettez ici le chemin de l'assembly
asm = Assembly.LoadFrom("C:\HelloWorld.dll")
'On obtient le type d'application (nom_namespace.nom_classe)
TYP = asm.GetType("HelloWorld.SayHello")
'On créé une instance du type
obj = Activator.CreateInstance(TYP)
'On exécute la méthode DireBonjour
Console.WriteLine(obj.DireBonjour())
End Sub

Vous pouvez maintenant compiler et exécuter votre programme et admirer le résultat!

III-Explication du code

Dans les deux premières lignes,on importe les packages System et System.Reflection,nécessaires à l'exécution.
A la septième ligne,on charge l'assembly que nous venions de créer au chapitre 1.

Ensuite,on obtient le type(enfin la classe).Il contient le namespace(donc le nom du projet) et la classe contenue dans l'assembly.

Puis on créé l'instance(un objet) de nore type,et enfin on exécute la méthode.

IV-Conclusion

Appeler une DLL dynamique n'est pas si dur que ça,et je ne fais que reprendre un article qui existait sur MSDN.
J'espère que ce tutorial vous sera utile.

Et surtout,je vous souhaite un bon développement!

28 juin 2007 17:42:14 :
J'ai rajouté d la coloration syntaxique...
27 août 2007 09:39:21 :
Mise à jour des variables
27 août 2007 09:42:06 :
Rajout des déclarations manquantes
  • signaler à un administrateur
    Commentaire de tirole le 30/06/2007 09:29:40

    Merci pour ton tuto très clair et très bien fait. Ca fait plaisir. Bonne continuation

  • signaler à un administrateur
    Commentaire de nikoko34 le 09/07/2007 16:41:36

    Merci pour le code qui m'est bien utile mais que pour que tout soit parfais et compilable, il manque à définir les variables asm et obj tel que ci-dessous...

    Dim asm As Assembly
    Dim obj as Object

  • signaler à un administrateur
    Commentaire de Tonton_David le 28/07/2007 10:39:51

    Bonjour

    les variables meth  +   index  +  compte

    Dim TYP As Type, meth As MethodInfo
    Dim index, compte As Integer

    Que l'on trouve dans ces lignes , ne sont pas de trop ???

  • signaler à un administrateur
    Commentaire de GEDDi le 27/09/2007 11:36:03

    Bonjour,

    Et sous VS2003 avec Framework 1.1 ce code ne fonctionne pas, il plante sur la ligne obj = Activator.CreateInstance(TYP) :(

  • signaler à un administrateur
    Commentaire de nikoko34 le 27/09/2007 14:24:27

    Si tu avais lu mon commentaire posté le 9 juillet, tu coprendrais pourquoi, GEDDI...

  • signaler à un administrateur
    Commentaire de GEDDi le 28/09/2007 14:42:30

    Bonjour,

    Oh mais bien sûr que j'ai tout lu avant de tester ton code.
    Le problème est toujours cependant identique : il ne fonctionne pas du tout sous VS 2003

  • signaler à un administrateur
    Commentaire de GEDDi le 08/10/2007 11:41:46

    Bonjour,

    Toujours pas de soluces pour VS 2003 ?

  • signaler à un administrateur
    Commentaire de Willi le 24/10/2007 15:54:12 administrateur CS

    Bonjour,
    GEDDi une erreur est-elle levée sur cette ligne lors de l'éxecution ?

  • signaler à un administrateur
    Commentaire de supersnail le 29/10/2007 10:59:48

    Ce tutoriel ne fonctionne qu'avec la version 2.0 du framework(la classe Activator est une nouvelle classe)

  • signaler à un administrateur
    Commentaire de Kev33 le 13/02/2008 13:49:14

    Bonjour, et merci pour ces explications intérresssantes

    J'ai une question aux sujet des namespaces.
    Si on englobe la classe SayHello par un namespace ex :

    Namespace TestBonjour
    Class SayHello

       Function DireBonjour()

             Return "Bonjour tout le monde"

       End Function

    End Class
    End Namespace

    les méthodes suivantes ne fonctionne pas et l'objet TYP est donc à la valeur "Nothing"
    asm.GetType("HelloWorld.SayHello")
    asm.GetType("HelloWorld.TestBonjour.SayHello")
    asm.GetType("TestBonjour.SayHello")

    Quelle est la syntaxe exaste si cela est possible ?

    Cordialement,

  • signaler à un administrateur
    Commentaire de Kev33 le 13/02/2008 18:02:42

    désolé ça fonctionne très bien en faisant

    asm.GetType("HelloWorld.TestBonjour.SayHello")

    pb d'actualisation de dll...

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Boutique

Boutique de goodies CodeS-SourceS