cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 2009
-
14 juil. 2007 à 20:02
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
14 juil. 2007 à 22:37
Bonjour tout le monde,
j'ai un petit problème sous Visual Basic 2005
je veux ajouter la possibilité de charger des plugin dans mon application. J'ai récupéré des exemples qui fonctionne très bien. Ils sont basic, mais très bien fait.
http://www.vbfrance.com/codes/APPLICATION-AVEC-PLUGINS_35652.aspx
Bon 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 ???
-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 20096 14 juil. 2007 à 21:04
j'ai trouvé
je pointais sur le répertoire Debug au lieu de Release. Étrange, puisque je n'ai jamais changé mon répertoire à release ???
-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 14 juil. 2007 à 22:37
Par défaut, le répertoire Debug est utiliser lorsque tu compile le projet en mode debug, c'est à dire en gros quand tu lance l'execution depuis l'environnement de VB
Le répertoire Release contient la version finale de ton application, c'est celle-là que tu dois normalement diffuser. Elle est obtenue en solicitant la commande Générer le projet ou la solution (suivant version) par le Menu Generer ou par le menu contextuel du projet.
Tout ça dans le fonctionnement par défaut et si tu n'as pas changer la configuration active dans les propriétés du projet