Application avec plugins

Soyez le premier à donner votre avis sur cette source.

Vue 16 348 fois - Téléchargée 2 000 fois

Description

Ceci est un exemple (simpliste) d'application gérant les plugins comme le font tant de logiciels.
Ceci permet en effet de créer des applications "modulaires" à souhait...
Il suffit de créer un nouveau plugin pour ajouter des fonctions (par exemple !)

Attention, ce code n'est qu'un exemple. Il ne fait rien de bien sorcier (à part afficher des boites de dialogue...)
Par contre, l'architecture est là, et elle peut reservir avec des projets plus conséquents !

Détails :
Le projet "Interface" permet de définir les fonctions et procédures qui devront se trouver dans chaque plugin.
Il y a deux projets de plugins : une dll et un exe. Ces deux projets font références à la dll du projet Interface
Il y a enfin le projet principal, qui lui aussi fait référence à la dll Interface. Par contre il ne fait aucune référence aux projets de plugins, puisque cela est géré dans le code

Conclusion :


Cette source est adaptée d'un article (en français !) qui se trouve ici :
http://pascalfresnay.free.fr/monoweb/wiki/index.php?title=TUTORIAL:_Syst%C3%A8me_Plugin

Cependant, je n'ai pas trouvé de truc semblable sur VBfrance, alors je poste, histoire d'éviter 10min. de recherche sur google au prochain intéressé...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
35
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
9 décembre 2006

Hello merci pour cette source

Avez vous exactement pareil pour Vb6 ? ou peut t'on la traduire en Visual Basic 6 ?

merci
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
5
c'est OK, puisque c'est des tests, j'étais sur du plugin. le try n'était pas nécessaire
pour mon erreur, c'était ma faute, je n'avais pas remarquer que la DLL c'était transféré de debug à release sans que je lui dise de changer. Donc j'exécutais toujours avec le même plugin

le code fonctionne numéro 1
merci beaucoup
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
T'a toujours pas mis les try pour les chargement de plugins et il ya un avertissement de dll donc faudrait que tu corrige.
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
5
Bonjour tout le monde,

voilà mon problème
Un projet Plugin qui possède une interface "iPlugin"
j'ai une application, qui référence la DLL de "iPlugin", appelons là "application" lol
Un projet myPlugin, qui référence la DLL de "iPlugin", qui possède une class "plug" qui implémente "iPlugin"

Donc en gros j'ai 2 applications qui référence mon interface "iPlugin"

Ensuite, dans "application" je fais ceci

-------------------------------------------
Public Sub New()

' Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()

' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
Dim tx As String
Dim dll As Reflection.Assembly
Dim tp As Type
'chargement du plugin1
tx = "C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2005\Projects\PlugTest\PlugTest\bin\Debug\PlugTest.dll" 'emplacement de la dll
'chargement de la dll
dll = Reflection.Assembly.LoadFrom(tx)

'Vérification de la présence de l'interface recherchée
Try
For Each tp In dll.GetTypes
If tp.IsClass Then
If tp.GetInterface("iPlugin", True) IsNot Nothing Then
'création de la référence au plugin
i1 = dll.CreateInstance(tp.ToString)
Exit Try
End If
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try

testt(New Outil2)
End Sub

Private Sub testt(ByVal outil As [Plugin].iOutil)
Try
CType(i1, Plugin.iPlugin).ReceiveOutil(outil)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Dim i1 As [Plugin].iPlugin
---------------------------------------------

En théorie, je devrais loader "myPlugin" et ensuite appeller la méthode "ReceiveOutil" pour lui envoyer quelques informations

Mais je Bug avant ça
je trouve mon Plugin dans le For
mais dès que je load, ça plante "i1 = dll.CreateInstance(tp.ToString)"

En gros, il dit que "myPlugin" ne peux pas être convertie de type "iPlugin", malgré que ma class implément réellement l'interface. J'ai même essayé avec héritable et ceci donne le même résultat.

On dirait à l'intérieur d'un même projet, il gère bien le passage de class vers le type interface qui implémente, mais ceci n'a pas l'air de marche si la class arrive d'une DLL.

ce que je comprend le moins, c'est que l'exemple fonctionne très bien et si je fait un ctype(dll.CreateInstance(tp.ToString),"iPlugin") sur mon projet, il n,est pas capapble, mais dans l'exemple oui ??? Pourtant je me suis bien assurer que l'interface utilisé était bien la même, c'est même exactement le même fichier sur mon disque dur et j'ai bien regéré tout les projet

Quelqu'un peut m'aider ???
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
Ok mais j'ai déjà répondu à cete question, il manquait la DLL Plugin2 donc je l'ai ajouté et j'ai fait que si le programme ne trouve pas une DLL il ignoe l'erreur et continue. Mias j'ai pas encore décortiquer le fonctionnement des plugins.

Là ca marche, vais essayer d'en tirer des connaissances ^^ Merci 10/10
Afficher les 41 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.