APPLICATION AVEC PLUGINS

LeDesassembleur Messages postés 64 Date d'inscription vendredi 21 décembre 2001 Statut Membre Dernière intervention 16 janvier 2009 - 20 janv. 2006 à 10:27
cs_toto70 Messages postés 35 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 9 décembre 2006 - 14 nov. 2007 à 17:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35652-application-avec-plugins

cs_toto70 Messages postés 35 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 9 décembre 2006
14 nov. 2007 à 17:47
Hello merci pour cette source

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

merci
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
18 juil. 2007 à 01:25
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
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
17 juil. 2007 à 22:07
T'a toujours pas mis les try pour les chargement de plugins et il ya un avertissement de dll donc faudrait que tu corrige.
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
14 juil. 2007 à 20:03
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 ???
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
30 juin 2007 à 14:00
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
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
30 juin 2007 à 10:42
Ben c'est juste une technique de débogage, mais bon...
Tu peux aussi ajouter une ligne, juste avant celle qui te cré l'erreur avec un truc du style :
"msgbox(tx)" (orthographe à vérifier...)
comme ça tu pourra savoir quel fichier te manque...

AlicVB
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
28 juin 2007 à 20:32
je vois pas le rapport avec la souris et le fichier dll.
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
28 juin 2007 à 18:23
"curseur sur le tx" ça signifie que lorsque tu obtient l'erreur en mode débugage de VS, avant d'arrêter le programme, tu peux passer le curseur de la souris sur les différentes variables, afin de voir leur valeur au moment de l'erreur.
Ainsi tu sauras quel est le nom du fichier qu'il cherche en vain (et qui te crée ton erreur)

AlicVB
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
27 juin 2007 à 13:27
"curseur sur le tx" ca donne quoi en Français ? Parceque c'est pas moi qui a créer les DLL et elles sont bien dans le dossier bin et en références dans le projet. à part le plugin 2 qui existe pas.
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
26 juin 2007 à 21:30
Salut,
je t'avouerai que je ne suis plus vraiment de la partie en VB.NET (bicose switch vers C#, histoire d'être comptaible linux avec Mono)
Mais au vu de l'erreur que tu as , je dirais que tu as un problème de compilation : tes dll doivent être compilées AVANT le projet principal (histoire que celui-ci puisse trouver les dll qu'il appelle).
A ta place, au moment où j'obtiens l'erreur, je mettrais mon curseur sur le 'tx', histoire de voir quel est le fichier qu'il ne trouve pas.

Mais désolé, je ne pourrais guère t'aider plus.
En fait j'ai posté ce code plus comme un tuto que comme une source en état de marche (bien qu'elle l'était chez moi)...

AlicVB
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
17 juin 2007 à 17:08
Alors l'auteur il se réveille ou il glande ?
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
31 mai 2007 à 16:49
Erreur ligne 29 : dll = Reflection.Assembly.LoadFrom(tx)
Erreur : FileNotFoundException
cs_jhd Messages postés 338 Date d'inscription mardi 13 août 2002 Statut Membre Dernière intervention 29 novembre 2007
6 déc. 2006 à 22:44
en effet un tutorial serait de bonne augure.

Perso j aimerai faire des plugin qui ajoute des composant visuel sur mon form1 par exemple qui ajoute une textbox sur mon form1.

Saurais tu comment gerer ca
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
14 oct. 2006 à 19:51
Euh, zen...
En toutes logiques, les références étaient présentes dans mon exemple zippé...
Et puis j'en ai reparlé dans mon dernier message "Dans P0, tu ajouteS une référnece à P1".
Mais bon, il est vrai que j'aurai pu/du le préciser. En fait, j'aurai du faire plutôt un tutoriel...

AlicVB
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
14 oct. 2006 à 19:24
Ah... Fallait le dire qu'il fallait le référencer :P Nan mais sérieux, tu ne l'as dit nulle part... Surtout quand l'on commence le .NET c'est très difficile de s'y retrouver quand même :P

Merci, je vais essayer ca une autre fois, et je t'en reparle.
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
14 oct. 2006 à 13:12
Euh, tu as bien référencé le projet interface1 dans le plugin de test ?
"interface1" est bien le nom du projet où est-ce juste le nom du fichier qui contient l'interface ?

Parce-qu'à priori, il n'y a pas de configuration spéciale à faire (de mémoire...).

AlicVB
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
11 oct. 2006 à 23:55
Woops désolé pour le doublon... Et euh... Je ne comprend pas toujours : j'ai créé un projet nommé interface1, avec mon projet WindowsApplication1 qui contient ma form1 principale, et j'ai créé un plugin de test.
Dans mon interface1 ; j'ai fait :
Public Interface Imonplugin1
Sub PCD1()
End Interface

Mais quand je vient dans mon plugin pour faire le Implements, je met Implements [Interface1].Imonplugin1 mais ca ne fonctionne pas !

Alors s'il faut vraiment faire quelque chose d'important dans les paramètres du projet, ca serais sympa de le dire ;)

Merci
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
11 oct. 2006 à 22:59
:P:P
LTourist Messages postés 24 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 8 février 2009
11 oct. 2006 à 21:58
Désolé en effet je voyais pas le rapport avec le projet mono et cette source ^^ Désolé j'étais un petit peu à côté de la plaque!! ^^
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
11 oct. 2006 à 18:28
Ah oki merci :D

C'est pas grave, maintenant je peux "plug-inner" mes applications :D

Merci !
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
10 oct. 2006 à 20:40
Aïe, oui, je ne me souvenait plus bien de ce code... en fait ce qui se trouve à l'interieur des crochets est le nom du projet qui contient l'interface... OK, ce n'était pas très heureux de nommer ce projet "Interface" dans l'exemple présenté ici...
En gros, la méthode :
Tu crées un projet principal --> P0
Tu crées un projet qui contiendra ta (ou tes) interfaces(s) --> P1
dans P0, tu ajoute un référence à P1.
Pour instancier une interface, tu écris une ligne du type : dim xxx as [P1].nomdelinterface.

C'est le principe de base...

Si tu as d'autres questions...
(Encore désolé pour cette impardonnable erreur de nommage)

AlicVB
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
10 oct. 2006 à 19:39
Argh non... Chui dans VB .NET :P mais je comprend pas comment tu as fait pour faire fonctionner [interface] !

C'est juste ca mom problème, moi quand je refais ce code dans Visual Basic 2005 Express Edition il me dit que c'est pas trouvable, alors que j'ai fait la même chose que toi...

Merci quand même ;)
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
10 oct. 2006 à 18:43
Euh, si tu es en VB (et pas VB.NET) alors c'est normal que ça ne marche pas...
La syntaxe est différente. Je ne sais pas comment on peut faire en VB, mais je sais qu'il existe des sources sur ce sujet ici.
Une petite recherche de "plugin" donne plein de résultats...
comme ici : http://www.vbfrance.com/codes/CREATION-PLUGINS-AVEC-INTERACTION_32875.aspx

Voilà
AlicVB
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
10 oct. 2006 à 01:14
Bien... J'essaie de faire de même dans VB avec le code et tout, mais le [interface].(nom) ne fonctionne pas !!


Alors si il y a quelque chose de spécial à faire, ca serais plaisant de le savoir ;)

Merci :)
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
9 oct. 2006 à 19:42
Euh, visiblement, vous ne parlez pas de la même chose... LTourist parle du code source (donc zip) et BLOOM1 parle du lien cité dans l'explication initiale.
Et en effet, ce lien ne fonctionne plus (le site de MonoFrance est en pleine reconstruction).

BLOOM1 -> Je peux sans doutes t'aider, mais ta question "Comment as-tu fait pour l'interface" est un peu vague. Je suppose que la réponse "je l'ai tapée sur mon clavier" ne te satisfera pas... Explique moi ce qui coince, et je tacherais de te répondre.

AlicVB
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
8 oct. 2006 à 17:41
Tu es bien le seul à qui ca donne un zip... Pourtant, dans l'URL, je ne vois pas de Zip ! Et puis, le lien redirige vers le projet Mono ...

Merci quand même :P
LTourist Messages postés 24 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 8 février 2009
8 oct. 2006 à 16:58
A ce que je vois, et alors que mon cache est vidé, ça me donne bien un zip... Je comprends vraiment pas pourquoi tu n'arrive pas à y accéder, désolé :S
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
6 oct. 2006 à 19:24
Bon toujours pas de réponse à ce que je vois !
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
1 oct. 2006 à 20:52
Ah non... Pourquoi ca redirige vers http://monofrance.tuxfamily.org/ ?? C'est supposé de tomber sur un tuto, non ?

Je vois vraiment pas pourquoi ca tombe sur ce lien quand tu dis que ca fonctionne encore... Au pire, vide ta cache et ré-essaie.

Merci
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
1 oct. 2006 à 20:49
Ah désolé !! C'est parce que il me manquait la fin du lien... Il est sur deux lignes hein :P
LTourist Messages postés 24 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 8 février 2009
1 oct. 2006 à 00:14
Le lien marche tres bien pour moi, tu devrais réessayer ;)
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
30 sept. 2006 à 00:43
Salut,
j'essaie de faire de même dans une de mes applications, mais comment tu as fait pour l'interface ?? Désolé mais ca serais plus simple si le lien marcherait encore...
cs_babboss Messages postés 121 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 29 novembre 2006
18 avril 2006 à 15:58
Genial cette source
Ca marche nikel !
Merci a toi :)
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
20 févr. 2006 à 12:17
Ok, je te demande car la dernière fois on m'a fait passer FrameWork 2 Bêta, et appremment c'était pas la bonne ! Car après je pouvais pas installer SDK 2 !

Merci !
LTourist Messages postés 24 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 8 février 2009
20 févr. 2006 à 11:41
TTssssss t as l'air d etre encore plus feignant que moi toi ^^ : en mettant "telecharger .net framework 2.0" dans google on trouve en premier lien http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displaylang=fr
Tu n'as plus qu'a telecharger, mais je vois pas a quoi ça va te servir si tu n'a pas vb 2005...
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
20 févr. 2006 à 11:26
Connais-tu le lien de La FrameWork 2 sur Microsoft.com ?

Redman
LTourist Messages postés 24 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 8 février 2009
20 févr. 2006 à 11:13
En effet Redman, c'est du vb.net 2005 :)
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
20 févr. 2006 à 00:50
Apparemment ca nécésitte une version supérieur à VB.Net 2003 !

Redman
cs_babboss Messages postés 121 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 29 novembre 2006
16 févr. 2006 à 15:12
Je n'est pas regarder le code mais ca m'a l'aire tres bien
Ca pourra sans doute me servir
Merci a toi ;)
LTourist Messages postés 24 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 8 février 2009
25 janv. 2006 à 21:24
Existe deja sur VBFrance... Mais en VB6, un grand merci donc a toi pour ceux qui souhaite passer a VB.Net (commme moi quoi) :)
LeDesassembleur Messages postés 64 Date d'inscription vendredi 21 décembre 2001 Statut Membre Dernière intervention 16 janvier 2009
20 janv. 2006 à 10:27
Cela semble interessant. Je vais tester dès ce week-end :)