Bonjour
Je suis en train d'implémenter un système de plug-ins dans une appli,
simplement basé sur une interface simplissime dont voici le code :
################
Namespace GIAUBE
'----- Définition de l'interface de base pour les applications en plug-ins
Public Interface iPlugin
Function IDPlugin() As Int32 'Retourne l'ID du plug-in
Function Icone() As Image 'Retourne l'icône associée au plug-in
Function Libellé() As String 'Retourne le libellé associé au plug-in
Function Description() As String 'Retourne un descriptif pour le
du plug-in
Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
End Interface
End Namespace
################
Mon but étant de gérer une IHM "chargeant" tous les composants applicatifs
sous forme d'icônes (listview dans mon cas), un double-clic sur une icône
exécutant le plug-in en question (appel de la méthode "Run" avec
de l'utilisateur, etc... Je simplifie !) => permet d'afficher des modules
spécifiques à nos applications internes, ou plus simplement de lancer des
applications quelconques.
Le hic, lorsque dans mon projet principal je parcours mon répertoire pour
localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
Mon code :
################
'----- Procédure de chargement des plug-ins
Sub _ChargementPlugins()
'Déclaration des variables locales
Dim _oTypes() As Type
'Liste de types
Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
System.Reflection.Assembly.GetCallingAssembly.Location)
'Répertoire courant
Dim _sPlugs() As String = IO.Directory.GetFiles(_sPluginDirectory,
"GI*.dll") 'Filtre sur les DLL
For Each _sPlug As String In _sPlugs
'Pour chaque DLL du répertoire
Try
'Tentative de chargement de l'assembly
Dim _oAss As System.Reflection.Assembly = _
System.Reflection.Assembly.LoadFrom(_sPlug)
_oTypes = _oAss.GetTypes()
For Each _oType As Type In _oTypes
'Pour chaque type contenu dans l'assembly
If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Then
'Plug-in trouvé !
Try
Dim _Obj As Object > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
"GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
MsgBox(CType(_Obj, GIAUBE.iPlugin).Libellé())
'<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Next
Catch ex As Exception
'Rien
End Try
Next
End Sub
################
À chaque fois il me claque un message "Le constructeur sur le type
GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
certes) dans ma classe implémentant mon interface !!! (dont voici le code)
################
Namespace GIAUBE
Public Class clsGITravaux
Implements iPlugin
'--Constructeur
Public Sub New()
End Sub
'-- Retourne la description du module en cours
Public Function Description() As String Implements
iPlugin.Description
Return "Saisie et édition de vos temps de travaux"
End Function
'Retourne l'icône représentative du module
Public Function Icone() As System.Drawing.Image Implements
iPlugin.Icone
'Déclaration des variables locales
Dim _asm As System.Reflection.Assembly > System.Reflection.Assembly.GetExecutingAssembly
Dim _img As Image >
Return _img 'Retourne l'image intégrée
_img.Dispose() 'Libération des ressources
End Function
'Retourne l'identifiant du module
Public Function IDPlugin() As Integer Implements iPlugin.IDPlugin
Return 105
End Function
'Retourne le libellé du module
Public Function Libellé() As String Implements iPlugin.Libellé
Return "Travaux"
End Function
'Exécute la fonctionnalité associée au module
Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
'Déclaration des variables locales
Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
travaux
_oTravaux.ShowDialog() 'Affichage de la
de saisie
_oTravaux.Dispose() 'Sortie "propre"
End Sub
End Class
End Namespace
################
Qqu'un pourrait m'aider sur ce coup-là ?...
Plus simplement, peut-on facilement instancier une assembly (dans mon
directement à partir de l'objet _oAss, au niveau de mon erreur) ?
MERCI
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr
Bonjour
Je suis en train d'implémenter un système de plug-ins dans une appli,
simplement basé sur une interface simplissime dont voici le code :
################
Namespace GIAUBE
'----- Définition de l'interface de base pour les applications en plug-ins
Public Interface iPlugin
Function IDPlugin() As Int32 'Retourne l'ID du plug-in
Function Icone() As Image 'Retourne l'icône associée au plug-in
Function Libellé() As String 'Retourne le libellé associé au plug-in
Function Description() As String 'Retourne un descriptif pour le
du plug-in
Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
End Interface
End Namespace
################
Mon but étant de gérer une IHM "chargeant" tous les composants applicatifs
sous forme d'icônes (listview dans mon cas), un double-clic sur une icône
exécutant le plug-in en question (appel de la méthode "Run" avec
de l'utilisateur, etc... Je simplifie !) => permet d'afficher des modules
spécifiques à nos applications internes, ou plus simplement de lancer des
applications quelconques.
Le hic, lorsque dans mon projet principal je parcours mon répertoire pour
localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
Mon code :
################
'----- Procédure de chargement des plug-ins
Sub _ChargementPlugins()
'Déclaration des variables locales
Dim _oTypes() As Type
'Liste de types
Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
System.Reflection.Assembly.GetCallingAssembly.Location)
'Répertoire courant
Dim _sPlugs() As String = IO.Directory.GetFiles(_sPluginDirectory,
"GI*.dll") 'Filtre sur les DLL
For Each _sPlug As String In _sPlugs
'Pour chaque DLL du répertoire
Try
'Tentative de chargement de l'assembly
Dim _oAss As System.Reflection.Assembly = _
System.Reflection.Assembly.LoadFrom(_sPlug)
_oTypes = _oAss.GetTypes()
For Each _oType As Type In _oTypes
'Pour chaque type contenu dans l'assembly
If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Then
'Plug-in trouvé !
Try
Dim _Obj As Object > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
"GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
MsgBox(CType(_Obj, GIAUBE.iPlugin).Libellé())
'<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Next
Catch ex As Exception
'Rien
End Try
Next
End Sub
################
À chaque fois il me claque un message "Le constructeur sur le type
GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
certes) dans ma classe implémentant mon interface !!! (dont voici le code)
################
Namespace GIAUBE
Public Class clsGITravaux
Implements iPlugin
'--Constructeur
Public Sub New()
End Sub
'-- Retourne la description du module en cours
Public Function Description() As String Implements
iPlugin.Description
Return "Saisie et édition de vos temps de travaux"
End Function
'Retourne l'icône représentative du module
Public Function Icone() As System.Drawing.Image Implements
iPlugin.Icone
'Déclaration des variables locales
Dim _asm As System.Reflection.Assembly > System.Reflection.Assembly.GetExecutingAssembly
Dim _img As Image >
Return _img 'Retourne l'image intégrée
_img.Dispose() 'Libération des ressources
End Function
'Retourne l'identifiant du module
Public Function IDPlugin() As Integer Implements iPlugin.IDPlugin
Return 105
End Function
'Retourne le libellé du module
Public Function Libellé() As String Implements iPlugin.Libellé
Return "Travaux"
End Function
'Exécute la fonctionnalité associée au module
Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
'Déclaration des variables locales
Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
travaux
_oTravaux.ShowDialog() 'Affichage de la
de saisie
_oTravaux.Dispose() 'Sortie "propre"
End Sub
End Class
End Namespace
################
Qqu'un pourrait m'aider sur ce coup-là ?...
Plus simplement, peut-on facilement instancier une assembly (dans mon
directement à partir de l'objet _oAss, au niveau de mon erreur) ?
MERCI
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr
Bonjour
Je suis en train d'implémenter un système de plug-ins dans une appli,
simplement basé sur une interface simplissime dont voici le code :
################
Namespace GIAUBE
'----- Définition de l'interface de base pour les applications en plug-ins
Public Interface iPlugin
Function IDPlugin() As Int32 'Retourne l'ID du plug-in
Function Icone() As Image 'Retourne l'icône associée au plug-in
Function Libellé() As String 'Retourne le libellé associé au plug-in
Function Description() As String 'Retourne un descriptif pour le
du plug-in
Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
End Interface
End Namespace
################
Mon but étant de gérer une IHM "chargeant" tous les composants applicatifs
sous forme d'icônes (listview dans mon cas), un double-clic sur une icône
exécutant le plug-in en question (appel de la méthode "Run" avec
de l'utilisateur, etc... Je simplifie !) => permet d'afficher des modules
spécifiques à nos applications internes, ou plus simplement de lancer des
applications quelconques.
Le hic, lorsque dans mon projet principal je parcours mon répertoire pour
localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
Mon code :
################
'----- Procédure de chargement des plug-ins
Sub _ChargementPlugins()
'Déclaration des variables locales
Dim _oTypes() As Type
'Liste de types
Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
System.Reflection.Assembly.GetCallingAssembly.Location)
'Répertoire courant
Dim _sPlugs() As String = IO.Directory.GetFiles(_sPluginDirectory,
"GI*.dll") 'Filtre sur les DLL
For Each _sPlug As String In _sPlugs
'Pour chaque DLL du répertoire
Try
'Tentative de chargement de l'assembly
Dim _oAss As System.Reflection.Assembly = _
System.Reflection.Assembly.LoadFrom(_sPlug)
_oTypes = _oAss.GetTypes()
For Each _oType As Type In _oTypes
'Pour chaque type contenu dans l'assembly
If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Then
'Plug-in trouvé !
Try
Dim _Obj As Object > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
"GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
MsgBox(CType(_Obj, GIAUBE.iPlugin).Libellé())
'<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Next
Catch ex As Exception
'Rien
End Try
Next
End Sub
################
À chaque fois il me claque un message "Le constructeur sur le type
GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
certes) dans ma classe implémentant mon interface !!! (dont voici le code)
################
Namespace GIAUBE
Public Class clsGITravaux
Implements iPlugin
'--Constructeur
Public Sub New()
End Sub
'-- Retourne la description du module en cours
Public Function Description() As String Implements
iPlugin.Description
Return "Saisie et édition de vos temps de travaux"
End Function
'Retourne l'icône représentative du module
Public Function Icone() As System.Drawing.Image Implements
iPlugin.Icone
'Déclaration des variables locales
Dim _asm As System.Reflection.Assembly > System.Reflection.Assembly.GetExecutingAssembly
Dim _img As Image >
Return _img 'Retourne l'image intégrée
_img.Dispose() 'Libération des ressources
End Function
'Retourne l'identifiant du module
Public Function IDPlugin() As Integer Implements iPlugin.IDPlugin
Return 105
End Function
'Retourne le libellé du module
Public Function Libellé() As String Implements iPlugin.Libellé
Return "Travaux"
End Function
'Exécute la fonctionnalité associée au module
Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
'Déclaration des variables locales
Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
travaux
_oTravaux.ShowDialog() 'Affichage de la
de saisie
_oTravaux.Dispose() 'Sortie "propre"
End Sub
End Class
End Namespace
################
Qqu'un pourrait m'aider sur ce coup-là ?...
Plus simplement, peut-on facilement instancier une assembly (dans mon
directement à partir de l'objet _oAss, au niveau de mon erreur) ?
MERCI
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr
Bonjour
Je suis en train d'implémenter un système de plug-ins dans une appli,
simplement basé sur une interface simplissime dont voici le code :
################
Namespace GIAUBE
'----- Définition de l'interface de base pour les applications en plug-ins
Public Interface iPlugin
Function IDPlugin() As Int32 'Retourne l'ID du plug-in
Function Icone() As Image 'Retourne l'icône associée au plug-in
Function Libellé() As String 'Retourne le libellé associé au plug-in
Function Description() As String 'Retourne un descriptif pour le
du plug-in
Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
End Interface
End Namespace
################
Mon but étant de gérer une IHM "chargeant" tous les composants applicatifs
sous forme d'icônes (listview dans mon cas), un double-clic sur une icône
exécutant le plug-in en question (appel de la méthode "Run" avec
de l'utilisateur, etc... Je simplifie !) => permet d'afficher des modules
spécifiques à nos applications internes, ou plus simplement de lancer des
applications quelconques.
Le hic, lorsque dans mon projet principal je parcours mon répertoire pour
localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
Mon code :
################
'----- Procédure de chargement des plug-ins
Sub _ChargementPlugins()
'Déclaration des variables locales
Dim _oTypes() As Type
'Liste de types
Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
System.Reflection.Assembly.GetCallingAssembly.Location)
'Répertoire courant
Dim _sPlugs() As String = IO.Directory.GetFiles(_sPluginDirectory,
"GI*.dll") 'Filtre sur les DLL
For Each _sPlug As String In _sPlugs
'Pour chaque DLL du répertoire
Try
'Tentative de chargement de l'assembly
Dim _oAss As System.Reflection.Assembly = _
System.Reflection.Assembly.LoadFrom(_sPlug)
_oTypes = _oAss.GetTypes()
For Each _oType As Type In _oTypes
'Pour chaque type contenu dans l'assembly
If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Then
'Plug-in trouvé !
Try
Dim _Obj As Object > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
"GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
MsgBox(CType(_Obj, GIAUBE.iPlugin).Libellé())
'<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Next
Catch ex As Exception
'Rien
End Try
Next
End Sub
################
À chaque fois il me claque un message "Le constructeur sur le type
GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
certes) dans ma classe implémentant mon interface !!! (dont voici le code)
################
Namespace GIAUBE
Public Class clsGITravaux
Implements iPlugin
'--Constructeur
Public Sub New()
End Sub
'-- Retourne la description du module en cours
Public Function Description() As String Implements
iPlugin.Description
Return "Saisie et édition de vos temps de travaux"
End Function
'Retourne l'icône représentative du module
Public Function Icone() As System.Drawing.Image Implements
iPlugin.Icone
'Déclaration des variables locales
Dim _asm As System.Reflection.Assembly > System.Reflection.Assembly.GetExecutingAssembly
Dim _img As Image >
Return _img 'Retourne l'image intégrée
_img.Dispose() 'Libération des ressources
End Function
'Retourne l'identifiant du module
Public Function IDPlugin() As Integer Implements iPlugin.IDPlugin
Return 105
End Function
'Retourne le libellé du module
Public Function Libellé() As String Implements iPlugin.Libellé
Return "Travaux"
End Function
'Exécute la fonctionnalité associée au module
Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
'Déclaration des variables locales
Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
travaux
_oTravaux.ShowDialog() 'Affichage de la
de saisie
_oTravaux.Dispose() 'Sortie "propre"
End Sub
End Class
End Namespace
################
Qqu'un pourrait m'aider sur ce coup-là ?...
Plus simplement, peut-on facilement instancier une assembly (dans mon
directement à partir de l'objet _oAss, au niveau de mon erreur) ?
MERCI
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr
Bonjour
Je suis en train d'implémenter un système de plug-ins dans une appli,
simplement basé sur une interface simplissime dont voici le code :
################
Namespace GIAUBE
'----- Définition de l'interface de base pour les applications en plug-ins
Public Interface iPlugin
Function IDPlugin() As Int32 'Retourne l'ID du plug-in
Function Icone() As Image 'Retourne l'icône associée au plug-in
Function Libellé() As String 'Retourne le libellé associé au plug-in
Function Description() As String 'Retourne un descriptif pour le
du plug-in
Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
End Interface
End Namespace
################
Mon but étant de gérer une IHM "chargeant" tous les composants applicatifs
sous forme d'icônes (listview dans mon cas), un double-clic sur une icône
exécutant le plug-in en question (appel de la méthode "Run" avec
de l'utilisateur, etc... Je simplifie !) => permet d'afficher des modules
spécifiques à nos applications internes, ou plus simplement de lancer des
applications quelconques.
Le hic, lorsque dans mon projet principal je parcours mon répertoire pour
localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
Mon code :
################
'----- Procédure de chargement des plug-ins
Sub _ChargementPlugins()
'Déclaration des variables locales
Dim _oTypes() As Type
'Liste de types
Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
System.Reflection.Assembly.GetCallingAssembly.Location)
'Répertoire courant
Dim _sPlugs() As String = IO.Directory.GetFiles(_sPluginDirectory,
"GI*.dll") 'Filtre sur les DLL
For Each _sPlug As String In _sPlugs
'Pour chaque DLL du répertoire
Try
'Tentative de chargement de l'assembly
Dim _oAss As System.Reflection.Assembly = _
System.Reflection.Assembly.LoadFrom(_sPlug)
_oTypes = _oAss.GetTypes()
For Each _oType As Type In _oTypes
'Pour chaque type contenu dans l'assembly
If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Then
'Plug-in trouvé !
Try
Dim _Obj As Object > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
"GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
MsgBox(CType(_Obj, GIAUBE.iPlugin).Libellé())
'<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Next
Catch ex As Exception
'Rien
End Try
Next
End Sub
################
À chaque fois il me claque un message "Le constructeur sur le type
GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
certes) dans ma classe implémentant mon interface !!! (dont voici le code)
################
Namespace GIAUBE
Public Class clsGITravaux
Implements iPlugin
'--Constructeur
Public Sub New()
End Sub
'-- Retourne la description du module en cours
Public Function Description() As String Implements
iPlugin.Description
Return "Saisie et édition de vos temps de travaux"
End Function
'Retourne l'icône représentative du module
Public Function Icone() As System.Drawing.Image Implements
iPlugin.Icone
'Déclaration des variables locales
Dim _asm As System.Reflection.Assembly > System.Reflection.Assembly.GetExecutingAssembly
Dim _img As Image >
Return _img 'Retourne l'image intégrée
_img.Dispose() 'Libération des ressources
End Function
'Retourne l'identifiant du module
Public Function IDPlugin() As Integer Implements iPlugin.IDPlugin
Return 105
End Function
'Retourne le libellé du module
Public Function Libellé() As String Implements iPlugin.Libellé
Return "Travaux"
End Function
'Exécute la fonctionnalité associée au module
Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
'Déclaration des variables locales
Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
travaux
_oTravaux.ShowDialog() 'Affichage de la
de saisie
_oTravaux.Dispose() 'Sortie "propre"
End Sub
End Class
End Namespace
################
Qqu'un pourrait m'aider sur ce coup-là ?...
Plus simplement, peut-on facilement instancier une assembly (dans mon
directement à partir de l'objet _oAss, au niveau de mon erreur) ?
MERCI
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr
Bonjour
Je suis en train d'implémenter un système de plug-ins dans une appli,
simplement basé sur une interface simplissime dont voici le code :
################
Namespace GIAUBE
'----- Définition de l'interface de base pour les applications en plug-ins
Public Interface iPlugin
Function IDPlugin() As Int32 'Retourne l'ID du plug-in
Function Icone() As Image 'Retourne l'icône associée au plug-in
Function Libellé() As String 'Retourne le libellé associé au plug-in
Function Description() As String 'Retourne un descriptif pour le
du plug-in
Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
End Interface
End Namespace
################
Mon but étant de gérer une IHM "chargeant" tous les composants applicatifs
sous forme d'icônes (listview dans mon cas), un double-clic sur une icône
exécutant le plug-in en question (appel de la méthode "Run" avec
de l'utilisateur, etc... Je simplifie !) => permet d'afficher des modules
spécifiques à nos applications internes, ou plus simplement de lancer des
applications quelconques.
Le hic, lorsque dans mon projet principal je parcours mon répertoire pour
localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
Mon code :
################
'----- Procédure de chargement des plug-ins
Sub _ChargementPlugins()
'Déclaration des variables locales
Dim _oTypes() As Type
'Liste de types
Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
System.Reflection.Assembly.GetCallingAssembly.Location)
'Répertoire courant
Dim _sPlugs() As String = IO.Directory.GetFiles(_sPluginDirectory,
"GI*.dll") 'Filtre sur les DLL
For Each _sPlug As String In _sPlugs
'Pour chaque DLL du répertoire
Try
'Tentative de chargement de l'assembly
Dim _oAss As System.Reflection.Assembly = _
System.Reflection.Assembly.LoadFrom(_sPlug)
_oTypes = _oAss.GetTypes()
For Each _oType As Type In _oTypes
'Pour chaque type contenu dans l'assembly
If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Then
'Plug-in trouvé !
Try
Dim _Obj As Object > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
"GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
MsgBox(CType(_Obj, GIAUBE.iPlugin).Libellé())
'<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Next
Catch ex As Exception
'Rien
End Try
Next
End Sub
################
À chaque fois il me claque un message "Le constructeur sur le type
GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
certes) dans ma classe implémentant mon interface !!! (dont voici le code)
################
Namespace GIAUBE
Public Class clsGITravaux
Implements iPlugin
'--Constructeur
Public Sub New()
End Sub
'-- Retourne la description du module en cours
Public Function Description() As String Implements
iPlugin.Description
Return "Saisie et édition de vos temps de travaux"
End Function
'Retourne l'icône représentative du module
Public Function Icone() As System.Drawing.Image Implements
iPlugin.Icone
'Déclaration des variables locales
Dim _asm As System.Reflection.Assembly > System.Reflection.Assembly.GetExecutingAssembly
Dim _img As Image >
Return _img 'Retourne l'image intégrée
_img.Dispose() 'Libération des ressources
End Function
'Retourne l'identifiant du module
Public Function IDPlugin() As Integer Implements iPlugin.IDPlugin
Return 105
End Function
'Retourne le libellé du module
Public Function Libellé() As String Implements iPlugin.Libellé
Return "Travaux"
End Function
'Exécute la fonctionnalité associée au module
Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
'Déclaration des variables locales
Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
travaux
_oTravaux.ShowDialog() 'Affichage de la
de saisie
_oTravaux.Dispose() 'Sortie "propre"
End Sub
End Class
End Namespace
################
Qqu'un pourrait m'aider sur ce coup-là ?...
Plus simplement, peut-on facilement instancier une assembly (dans mon
directement à partir de l'objet _oAss, au niveau de mon erreur) ?
MERCI
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr
et si tu rajoute Sub New() dans ton interface ?
--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrleportad-21
______________________________________________
"Cédric Girard" wrote in message
news:
> Bonjour
>
> Je suis en train d'implémenter un système de plug-ins dans une appli,
> simplement basé sur une interface simplissime dont voici le code :
>
>
> ################
> Namespace GIAUBE
> '----- Définition de l'interface de base pour les applications en
> Public Interface iPlugin
> Function IDPlugin() As Int32 'Retourne l'ID du plug-in
> Function Icone() As Image 'Retourne l'icône associée au plug-in
> Function Libellé() As String 'Retourne le libellé associé au plug-in
> Function Description() As String 'Retourne un descriptif pour le
tooltip
> du plug-in
> Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
> End Interface
> End Namespace
>
> ################
>
> Mon but étant de gérer une IHM "chargeant" tous les composants
> sous forme d'icônes (listview dans mon cas), un double-clic sur une
> exécutant le plug-in en question (appel de la méthode "Run" avec
identifiant
> de l'utilisateur, etc... Je simplifie !) => permet d'afficher des
> spécifiques à nos applications internes, ou plus simplement de lancer
> applications quelconques.
>
>
> Le hic, lorsque dans mon projet principal je parcours mon répertoire
> localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
>
> Mon code :
>
> ################
> '----- Procédure de chargement des plug-ins
> Sub _ChargementPlugins()
>
> 'Déclaration des variables locales
> Dim _oTypes() As Type
> 'Liste de types
> Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
> System.Reflection.Assembly.GetCallingAssembly.Location)
> 'Répertoire courant
> Dim _sPlugs() As String IO.Directory.GetFiles(_sPluginDirectory,
> "GI*.dll") 'Filtre sur les DLL
>
> For Each _sPlug As String In _sPlugs
> 'Pour chaque DLL du répertoire
> Try
> 'Tentative de chargement de l'assembly
> Dim _oAss As System.Reflection.Assembly = _
> System.Reflection.Assembly.LoadFrom(_sPlug)
> _oTypes = _oAss.GetTypes()
> For Each _oType As Type In _oTypes
> 'Pour chaque type contenu dans l'assembly
> If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Nothing
> Then
> 'Plug-in trouvé !
> Try
> Dim _Obj As Object > > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
> "GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
> MsgBox(CType(_Obj,
> '<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
> Catch ex As Exception
> MsgBox(ex.Message)
> End Try
> End If
> Next
> Catch ex As Exception
> 'Rien
> End Try
> Next
>
> End Sub
>
> ################
>
> À chaque fois il me claque un message "Le constructeur sur le type
> GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
(bidon,
> certes) dans ma classe implémentant mon interface !!! (dont voici le
>
>
> ################
> Namespace GIAUBE
>
> Public Class clsGITravaux
> Implements iPlugin
>
> '--Constructeur
> Public Sub New()
>
> End Sub
>
> '-- Retourne la description du module en cours
> Public Function Description() As String Implements
> iPlugin.Description
> Return "Saisie et édition de vos temps de travaux"
> End Function
>
> 'Retourne l'icône représentative du module
> Public Function Icone() As System.Drawing.Image Implements
> iPlugin.Icone
>
> 'Déclaration des variables locales
> Dim _asm As System.Reflection.Assembly > > System.Reflection.Assembly.GetExecutingAssembly
> Dim _img As Image > >
>
> Return _img 'Retourne l'image intégrée
>
> _img.Dispose() 'Libération des ressources
>
> End Function
>
> 'Retourne l'identifiant du module
> Public Function IDPlugin() As Integer Implements
> Return 105
> End Function
>
> 'Retourne le libellé du module
> Public Function Libellé() As String Implements iPlugin.Libellé
> Return "Travaux"
> End Function
>
> 'Exécute la fonctionnalité associée au module
> Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
>
> 'Déclaration des variables locales
> Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
> travaux
>
> _oTravaux.ShowDialog() 'Affichage de la
fenêtre
> de saisie
>
> _oTravaux.Dispose() 'Sortie "propre"
>
> End Sub
>
> End Class
>
> End Namespace
>
> ################
>
>
> Qqu'un pourrait m'aider sur ce coup-là ?...
>
> Plus simplement, peut-on facilement instancier une assembly (dans mon
code,
> directement à partir de l'objet _oAss, au niveau de mon erreur) ?
>
> MERCI
>
> --
> Cédric Girard
> OCERA CFGA (Aube)
> Mon site perso : http://www.mainecoon.fr
>
>
et si tu rajoute Sub New() dans ton interface ?
--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrleportad-21
______________________________________________
"Cédric Girard" <___cgirard@cer-ca.fr> wrote in message
news:uTJD8KabEHA.2840@TK2MSFTNGP11.phx.gbl...
> Bonjour
>
> Je suis en train d'implémenter un système de plug-ins dans une appli,
> simplement basé sur une interface simplissime dont voici le code :
>
>
> ################
> Namespace GIAUBE
> '----- Définition de l'interface de base pour les applications en
> Public Interface iPlugin
> Function IDPlugin() As Int32 'Retourne l'ID du plug-in
> Function Icone() As Image 'Retourne l'icône associée au plug-in
> Function Libellé() As String 'Retourne le libellé associé au plug-in
> Function Description() As String 'Retourne un descriptif pour le
tooltip
> du plug-in
> Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
> End Interface
> End Namespace
>
> ################
>
> Mon but étant de gérer une IHM "chargeant" tous les composants
> sous forme d'icônes (listview dans mon cas), un double-clic sur une
> exécutant le plug-in en question (appel de la méthode "Run" avec
identifiant
> de l'utilisateur, etc... Je simplifie !) => permet d'afficher des
> spécifiques à nos applications internes, ou plus simplement de lancer
> applications quelconques.
>
>
> Le hic, lorsque dans mon projet principal je parcours mon répertoire
> localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
>
> Mon code :
>
> ################
> '----- Procédure de chargement des plug-ins
> Sub _ChargementPlugins()
>
> 'Déclaration des variables locales
> Dim _oTypes() As Type
> 'Liste de types
> Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
> System.Reflection.Assembly.GetCallingAssembly.Location)
> 'Répertoire courant
> Dim _sPlugs() As String IO.Directory.GetFiles(_sPluginDirectory,
> "GI*.dll") 'Filtre sur les DLL
>
> For Each _sPlug As String In _sPlugs
> 'Pour chaque DLL du répertoire
> Try
> 'Tentative de chargement de l'assembly
> Dim _oAss As System.Reflection.Assembly = _
> System.Reflection.Assembly.LoadFrom(_sPlug)
> _oTypes = _oAss.GetTypes()
> For Each _oType As Type In _oTypes
> 'Pour chaque type contenu dans l'assembly
> If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Nothing
> Then
> 'Plug-in trouvé !
> Try
> Dim _Obj As Object > > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
> "GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
> MsgBox(CType(_Obj,
> '<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
> Catch ex As Exception
> MsgBox(ex.Message)
> End Try
> End If
> Next
> Catch ex As Exception
> 'Rien
> End Try
> Next
>
> End Sub
>
> ################
>
> À chaque fois il me claque un message "Le constructeur sur le type
> GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
(bidon,
> certes) dans ma classe implémentant mon interface !!! (dont voici le
>
>
> ################
> Namespace GIAUBE
>
> Public Class clsGITravaux
> Implements iPlugin
>
> '--Constructeur
> Public Sub New()
>
> End Sub
>
> '-- Retourne la description du module en cours
> Public Function Description() As String Implements
> iPlugin.Description
> Return "Saisie et édition de vos temps de travaux"
> End Function
>
> 'Retourne l'icône représentative du module
> Public Function Icone() As System.Drawing.Image Implements
> iPlugin.Icone
>
> 'Déclaration des variables locales
> Dim _asm As System.Reflection.Assembly > > System.Reflection.Assembly.GetExecutingAssembly
> Dim _img As Image > >
>
> Return _img 'Retourne l'image intégrée
>
> _img.Dispose() 'Libération des ressources
>
> End Function
>
> 'Retourne l'identifiant du module
> Public Function IDPlugin() As Integer Implements
> Return 105
> End Function
>
> 'Retourne le libellé du module
> Public Function Libellé() As String Implements iPlugin.Libellé
> Return "Travaux"
> End Function
>
> 'Exécute la fonctionnalité associée au module
> Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
>
> 'Déclaration des variables locales
> Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
> travaux
>
> _oTravaux.ShowDialog() 'Affichage de la
fenêtre
> de saisie
>
> _oTravaux.Dispose() 'Sortie "propre"
>
> End Sub
>
> End Class
>
> End Namespace
>
> ################
>
>
> Qqu'un pourrait m'aider sur ce coup-là ?...
>
> Plus simplement, peut-on facilement instancier une assembly (dans mon
code,
> directement à partir de l'objet _oAss, au niveau de mon erreur) ?
>
> MERCI
>
> --
> Cédric Girard
> OCERA CFGA (Aube)
> Mon site perso : http://www.mainecoon.fr
>
>
et si tu rajoute Sub New() dans ton interface ?
--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrleportad-21
______________________________________________
"Cédric Girard" wrote in message
news:
> Bonjour
>
> Je suis en train d'implémenter un système de plug-ins dans une appli,
> simplement basé sur une interface simplissime dont voici le code :
>
>
> ################
> Namespace GIAUBE
> '----- Définition de l'interface de base pour les applications en
> Public Interface iPlugin
> Function IDPlugin() As Int32 'Retourne l'ID du plug-in
> Function Icone() As Image 'Retourne l'icône associée au plug-in
> Function Libellé() As String 'Retourne le libellé associé au plug-in
> Function Description() As String 'Retourne un descriptif pour le
tooltip
> du plug-in
> Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
> End Interface
> End Namespace
>
> ################
>
> Mon but étant de gérer une IHM "chargeant" tous les composants
> sous forme d'icônes (listview dans mon cas), un double-clic sur une
> exécutant le plug-in en question (appel de la méthode "Run" avec
identifiant
> de l'utilisateur, etc... Je simplifie !) => permet d'afficher des
> spécifiques à nos applications internes, ou plus simplement de lancer
> applications quelconques.
>
>
> Le hic, lorsque dans mon projet principal je parcours mon répertoire
> localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
>
> Mon code :
>
> ################
> '----- Procédure de chargement des plug-ins
> Sub _ChargementPlugins()
>
> 'Déclaration des variables locales
> Dim _oTypes() As Type
> 'Liste de types
> Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
> System.Reflection.Assembly.GetCallingAssembly.Location)
> 'Répertoire courant
> Dim _sPlugs() As String IO.Directory.GetFiles(_sPluginDirectory,
> "GI*.dll") 'Filtre sur les DLL
>
> For Each _sPlug As String In _sPlugs
> 'Pour chaque DLL du répertoire
> Try
> 'Tentative de chargement de l'assembly
> Dim _oAss As System.Reflection.Assembly = _
> System.Reflection.Assembly.LoadFrom(_sPlug)
> _oTypes = _oAss.GetTypes()
> For Each _oType As Type In _oTypes
> 'Pour chaque type contenu dans l'assembly
> If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Nothing
> Then
> 'Plug-in trouvé !
> Try
> Dim _Obj As Object > > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
> "GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
> MsgBox(CType(_Obj,
> '<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
> Catch ex As Exception
> MsgBox(ex.Message)
> End Try
> End If
> Next
> Catch ex As Exception
> 'Rien
> End Try
> Next
>
> End Sub
>
> ################
>
> À chaque fois il me claque un message "Le constructeur sur le type
> GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
(bidon,
> certes) dans ma classe implémentant mon interface !!! (dont voici le
>
>
> ################
> Namespace GIAUBE
>
> Public Class clsGITravaux
> Implements iPlugin
>
> '--Constructeur
> Public Sub New()
>
> End Sub
>
> '-- Retourne la description du module en cours
> Public Function Description() As String Implements
> iPlugin.Description
> Return "Saisie et édition de vos temps de travaux"
> End Function
>
> 'Retourne l'icône représentative du module
> Public Function Icone() As System.Drawing.Image Implements
> iPlugin.Icone
>
> 'Déclaration des variables locales
> Dim _asm As System.Reflection.Assembly > > System.Reflection.Assembly.GetExecutingAssembly
> Dim _img As Image > >
>
> Return _img 'Retourne l'image intégrée
>
> _img.Dispose() 'Libération des ressources
>
> End Function
>
> 'Retourne l'identifiant du module
> Public Function IDPlugin() As Integer Implements
> Return 105
> End Function
>
> 'Retourne le libellé du module
> Public Function Libellé() As String Implements iPlugin.Libellé
> Return "Travaux"
> End Function
>
> 'Exécute la fonctionnalité associée au module
> Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
>
> 'Déclaration des variables locales
> Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
> travaux
>
> _oTravaux.ShowDialog() 'Affichage de la
fenêtre
> de saisie
>
> _oTravaux.Dispose() 'Sortie "propre"
>
> End Sub
>
> End Class
>
> End Namespace
>
> ################
>
>
> Qqu'un pourrait m'aider sur ce coup-là ?...
>
> Plus simplement, peut-on facilement instancier une assembly (dans mon
code,
> directement à partir de l'objet _oAss, au niveau de mon erreur) ?
>
> MERCI
>
> --
> Cédric Girard
> OCERA CFGA (Aube)
> Mon site perso : http://www.mainecoon.fr
>
>
pardon, j'ai dis une connerie. C'est dans l'instanciation qu'il y a un
pb.CreateInstanceFromAndUnwrap est utilisé pour le remoting et permet de
créer un proxy de ta classe coté client. Donc c'est pas ce que tu cherches
faire ici.. C'est CreateInstance (ou Activator.CreateInstance) qu'il faut
utiliser. Fait bien attention aux flags.
--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrleportad-21
______________________________________________
"Cédric Girard" wrote in message
news:
> Bonjour
>
> Je suis en train d'implémenter un système de plug-ins dans une appli,
> simplement basé sur une interface simplissime dont voici le code :
>
>
> ################
> Namespace GIAUBE
> '----- Définition de l'interface de base pour les applications en
> Public Interface iPlugin
> Function IDPlugin() As Int32 'Retourne l'ID du plug-in
> Function Icone() As Image 'Retourne l'icône associée au plug-in
> Function Libellé() As String 'Retourne le libellé associé au plug-in
> Function Description() As String 'Retourne un descriptif pour le
tooltip
> du plug-in
> Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
> End Interface
> End Namespace
>
> ################
>
> Mon but étant de gérer une IHM "chargeant" tous les composants
> sous forme d'icônes (listview dans mon cas), un double-clic sur une
> exécutant le plug-in en question (appel de la méthode "Run" avec
identifiant
> de l'utilisateur, etc... Je simplifie !) => permet d'afficher des
> spécifiques à nos applications internes, ou plus simplement de lancer
> applications quelconques.
>
>
> Le hic, lorsque dans mon projet principal je parcours mon répertoire
> localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
>
> Mon code :
>
> ################
> '----- Procédure de chargement des plug-ins
> Sub _ChargementPlugins()
>
> 'Déclaration des variables locales
> Dim _oTypes() As Type
> 'Liste de types
> Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
> System.Reflection.Assembly.GetCallingAssembly.Location)
> 'Répertoire courant
> Dim _sPlugs() As String IO.Directory.GetFiles(_sPluginDirectory,
> "GI*.dll") 'Filtre sur les DLL
>
> For Each _sPlug As String In _sPlugs
> 'Pour chaque DLL du répertoire
> Try
> 'Tentative de chargement de l'assembly
> Dim _oAss As System.Reflection.Assembly = _
> System.Reflection.Assembly.LoadFrom(_sPlug)
> _oTypes = _oAss.GetTypes()
> For Each _oType As Type In _oTypes
> 'Pour chaque type contenu dans l'assembly
> If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Nothing
> Then
> 'Plug-in trouvé !
> Try
> Dim _Obj As Object > > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
> "GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
> MsgBox(CType(_Obj,
> '<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
> Catch ex As Exception
> MsgBox(ex.Message)
> End Try
> End If
> Next
> Catch ex As Exception
> 'Rien
> End Try
> Next
>
> End Sub
>
> ################
>
> À chaque fois il me claque un message "Le constructeur sur le type
> GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
(bidon,
> certes) dans ma classe implémentant mon interface !!! (dont voici le
>
>
> ################
> Namespace GIAUBE
>
> Public Class clsGITravaux
> Implements iPlugin
>
> '--Constructeur
> Public Sub New()
>
> End Sub
>
> '-- Retourne la description du module en cours
> Public Function Description() As String Implements
> iPlugin.Description
> Return "Saisie et édition de vos temps de travaux"
> End Function
>
> 'Retourne l'icône représentative du module
> Public Function Icone() As System.Drawing.Image Implements
> iPlugin.Icone
>
> 'Déclaration des variables locales
> Dim _asm As System.Reflection.Assembly > > System.Reflection.Assembly.GetExecutingAssembly
> Dim _img As Image > >
>
> Return _img 'Retourne l'image intégrée
>
> _img.Dispose() 'Libération des ressources
>
> End Function
>
> 'Retourne l'identifiant du module
> Public Function IDPlugin() As Integer Implements
> Return 105
> End Function
>
> 'Retourne le libellé du module
> Public Function Libellé() As String Implements iPlugin.Libellé
> Return "Travaux"
> End Function
>
> 'Exécute la fonctionnalité associée au module
> Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
>
> 'Déclaration des variables locales
> Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
> travaux
>
> _oTravaux.ShowDialog() 'Affichage de la
fenêtre
> de saisie
>
> _oTravaux.Dispose() 'Sortie "propre"
>
> End Sub
>
> End Class
>
> End Namespace
>
> ################
>
>
> Qqu'un pourrait m'aider sur ce coup-là ?...
>
> Plus simplement, peut-on facilement instancier une assembly (dans mon
code,
> directement à partir de l'objet _oAss, au niveau de mon erreur) ?
>
> MERCI
>
> --
> Cédric Girard
> OCERA CFGA (Aube)
> Mon site perso : http://www.mainecoon.fr
>
>
pardon, j'ai dis une connerie. C'est dans l'instanciation qu'il y a un
pb.CreateInstanceFromAndUnwrap est utilisé pour le remoting et permet de
créer un proxy de ta classe coté client. Donc c'est pas ce que tu cherches
faire ici.. C'est CreateInstance (ou Activator.CreateInstance) qu'il faut
utiliser. Fait bien attention aux flags.
--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrleportad-21
______________________________________________
"Cédric Girard" <___cgirard@cer-ca.fr> wrote in message
news:uTJD8KabEHA.2840@TK2MSFTNGP11.phx.gbl...
> Bonjour
>
> Je suis en train d'implémenter un système de plug-ins dans une appli,
> simplement basé sur une interface simplissime dont voici le code :
>
>
> ################
> Namespace GIAUBE
> '----- Définition de l'interface de base pour les applications en
> Public Interface iPlugin
> Function IDPlugin() As Int32 'Retourne l'ID du plug-in
> Function Icone() As Image 'Retourne l'icône associée au plug-in
> Function Libellé() As String 'Retourne le libellé associé au plug-in
> Function Description() As String 'Retourne un descriptif pour le
tooltip
> du plug-in
> Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
> End Interface
> End Namespace
>
> ################
>
> Mon but étant de gérer une IHM "chargeant" tous les composants
> sous forme d'icônes (listview dans mon cas), un double-clic sur une
> exécutant le plug-in en question (appel de la méthode "Run" avec
identifiant
> de l'utilisateur, etc... Je simplifie !) => permet d'afficher des
> spécifiques à nos applications internes, ou plus simplement de lancer
> applications quelconques.
>
>
> Le hic, lorsque dans mon projet principal je parcours mon répertoire
> localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
>
> Mon code :
>
> ################
> '----- Procédure de chargement des plug-ins
> Sub _ChargementPlugins()
>
> 'Déclaration des variables locales
> Dim _oTypes() As Type
> 'Liste de types
> Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
> System.Reflection.Assembly.GetCallingAssembly.Location)
> 'Répertoire courant
> Dim _sPlugs() As String IO.Directory.GetFiles(_sPluginDirectory,
> "GI*.dll") 'Filtre sur les DLL
>
> For Each _sPlug As String In _sPlugs
> 'Pour chaque DLL du répertoire
> Try
> 'Tentative de chargement de l'assembly
> Dim _oAss As System.Reflection.Assembly = _
> System.Reflection.Assembly.LoadFrom(_sPlug)
> _oTypes = _oAss.GetTypes()
> For Each _oType As Type In _oTypes
> 'Pour chaque type contenu dans l'assembly
> If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Nothing
> Then
> 'Plug-in trouvé !
> Try
> Dim _Obj As Object > > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
> "GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
> MsgBox(CType(_Obj,
> '<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
> Catch ex As Exception
> MsgBox(ex.Message)
> End Try
> End If
> Next
> Catch ex As Exception
> 'Rien
> End Try
> Next
>
> End Sub
>
> ################
>
> À chaque fois il me claque un message "Le constructeur sur le type
> GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
(bidon,
> certes) dans ma classe implémentant mon interface !!! (dont voici le
>
>
> ################
> Namespace GIAUBE
>
> Public Class clsGITravaux
> Implements iPlugin
>
> '--Constructeur
> Public Sub New()
>
> End Sub
>
> '-- Retourne la description du module en cours
> Public Function Description() As String Implements
> iPlugin.Description
> Return "Saisie et édition de vos temps de travaux"
> End Function
>
> 'Retourne l'icône représentative du module
> Public Function Icone() As System.Drawing.Image Implements
> iPlugin.Icone
>
> 'Déclaration des variables locales
> Dim _asm As System.Reflection.Assembly > > System.Reflection.Assembly.GetExecutingAssembly
> Dim _img As Image > >
>
> Return _img 'Retourne l'image intégrée
>
> _img.Dispose() 'Libération des ressources
>
> End Function
>
> 'Retourne l'identifiant du module
> Public Function IDPlugin() As Integer Implements
> Return 105
> End Function
>
> 'Retourne le libellé du module
> Public Function Libellé() As String Implements iPlugin.Libellé
> Return "Travaux"
> End Function
>
> 'Exécute la fonctionnalité associée au module
> Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
>
> 'Déclaration des variables locales
> Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
> travaux
>
> _oTravaux.ShowDialog() 'Affichage de la
fenêtre
> de saisie
>
> _oTravaux.Dispose() 'Sortie "propre"
>
> End Sub
>
> End Class
>
> End Namespace
>
> ################
>
>
> Qqu'un pourrait m'aider sur ce coup-là ?...
>
> Plus simplement, peut-on facilement instancier une assembly (dans mon
code,
> directement à partir de l'objet _oAss, au niveau de mon erreur) ?
>
> MERCI
>
> --
> Cédric Girard
> OCERA CFGA (Aube)
> Mon site perso : http://www.mainecoon.fr
>
>
pardon, j'ai dis une connerie. C'est dans l'instanciation qu'il y a un
pb.CreateInstanceFromAndUnwrap est utilisé pour le remoting et permet de
créer un proxy de ta classe coté client. Donc c'est pas ce que tu cherches
faire ici.. C'est CreateInstance (ou Activator.CreateInstance) qu'il faut
utiliser. Fait bien attention aux flags.
--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrleportad-21
______________________________________________
"Cédric Girard" wrote in message
news:
> Bonjour
>
> Je suis en train d'implémenter un système de plug-ins dans une appli,
> simplement basé sur une interface simplissime dont voici le code :
>
>
> ################
> Namespace GIAUBE
> '----- Définition de l'interface de base pour les applications en
> Public Interface iPlugin
> Function IDPlugin() As Int32 'Retourne l'ID du plug-in
> Function Icone() As Image 'Retourne l'icône associée au plug-in
> Function Libellé() As String 'Retourne le libellé associé au plug-in
> Function Description() As String 'Retourne un descriptif pour le
tooltip
> du plug-in
> Sub Run(ByVal IDAgent As Int32) 'Permet d'exécuter le plug-in
> End Interface
> End Namespace
>
> ################
>
> Mon but étant de gérer une IHM "chargeant" tous les composants
> sous forme d'icônes (listview dans mon cas), un double-clic sur une
> exécutant le plug-in en question (appel de la méthode "Run" avec
identifiant
> de l'utilisateur, etc... Je simplifie !) => permet d'afficher des
> spécifiques à nos applications internes, ou plus simplement de lancer
> applications quelconques.
>
>
> Le hic, lorsque dans mon projet principal je parcours mon répertoire
> localiser mes DLL et récupérer les infos de chaque plugin, ça coince !
>
> Mon code :
>
> ################
> '----- Procédure de chargement des plug-ins
> Sub _ChargementPlugins()
>
> 'Déclaration des variables locales
> Dim _oTypes() As Type
> 'Liste de types
> Dim _sPluginDirectory As String = IO.Path.GetDirectoryName( _
> System.Reflection.Assembly.GetCallingAssembly.Location)
> 'Répertoire courant
> Dim _sPlugs() As String IO.Directory.GetFiles(_sPluginDirectory,
> "GI*.dll") 'Filtre sur les DLL
>
> For Each _sPlug As String In _sPlugs
> 'Pour chaque DLL du répertoire
> Try
> 'Tentative de chargement de l'assembly
> Dim _oAss As System.Reflection.Assembly = _
> System.Reflection.Assembly.LoadFrom(_sPlug)
> _oTypes = _oAss.GetTypes()
> For Each _oType As Type In _oTypes
> 'Pour chaque type contenu dans l'assembly
> If Not _oType.GetInterface("GIAUBE.iPlugin") Is
Nothing
> Then
> 'Plug-in trouvé !
> Try
> Dim _Obj As Object > > AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(_sPlug,
> "GIAUBE.iPlugin") 'XXXXXXXX ERREUR !!! :-((
> MsgBox(CType(_Obj,
> '<<<<<====== ICI TEST POUR VERIF BON FONCTIONNEMENT
> Catch ex As Exception
> MsgBox(ex.Message)
> End Try
> End If
> Next
> Catch ex As Exception
> 'Rien
> End Try
> Next
>
> End Sub
>
> ################
>
> À chaque fois il me claque un message "Le constructeur sur le type
> GIAUBE.iPlugin est introuvable", alors que j'ai bien un constructeur
(bidon,
> certes) dans ma classe implémentant mon interface !!! (dont voici le
>
>
> ################
> Namespace GIAUBE
>
> Public Class clsGITravaux
> Implements iPlugin
>
> '--Constructeur
> Public Sub New()
>
> End Sub
>
> '-- Retourne la description du module en cours
> Public Function Description() As String Implements
> iPlugin.Description
> Return "Saisie et édition de vos temps de travaux"
> End Function
>
> 'Retourne l'icône représentative du module
> Public Function Icone() As System.Drawing.Image Implements
> iPlugin.Icone
>
> 'Déclaration des variables locales
> Dim _asm As System.Reflection.Assembly > > System.Reflection.Assembly.GetExecutingAssembly
> Dim _img As Image > >
>
> Return _img 'Retourne l'image intégrée
>
> _img.Dispose() 'Libération des ressources
>
> End Function
>
> 'Retourne l'identifiant du module
> Public Function IDPlugin() As Integer Implements
> Return 105
> End Function
>
> 'Retourne le libellé du module
> Public Function Libellé() As String Implements iPlugin.Libellé
> Return "Travaux"
> End Function
>
> 'Exécute la fonctionnalité associée au module
> Public Sub Run(ByVal IDAgent As Integer) Implements iPlugin.Run
>
> 'Déclaration des variables locales
> Dim _oTravaux As New frmTrav(IDAgent) 'Objet formulaire
> travaux
>
> _oTravaux.ShowDialog() 'Affichage de la
fenêtre
> de saisie
>
> _oTravaux.Dispose() 'Sortie "propre"
>
> End Sub
>
> End Class
>
> End Namespace
>
> ################
>
>
> Qqu'un pourrait m'aider sur ce coup-là ?...
>
> Plus simplement, peut-on facilement instancier une assembly (dans mon
code,
> directement à partir de l'objet _oAss, au niveau de mon erreur) ?
>
> MERCI
>
> --
> Cédric Girard
> OCERA CFGA (Aube)
> Mon site perso : http://www.mainecoon.fr
>
>
Il faut bien caster vers l'interface utilisée par mes plugins, non ?
Il faut bien caster vers l'interface utilisée par mes plugins, non ?
Il faut bien caster vers l'interface utilisée par mes plugins, non ?
Bonjour,
> Il faut bien caster vers l'interface utilisée par mes plugins, non ?
Oui mais il faut faire attention à un point de détail important :
qui charge les plugins et les plugins doivent connaître la même interface.
Si par exemple vous avez copié/collé le code de votre interface et qu'il
trouve en double dans les assemblies, alors les 2 interfaces sont
considérées comme étant 2 classes différentes. Pour éviter ceci, le plus
simple est de créer une assembly contenant votre interface et d'utiliser
références à cette assembly.
--
Zazar
Bonjour,
> Il faut bien caster vers l'interface utilisée par mes plugins, non ?
Oui mais il faut faire attention à un point de détail important :
qui charge les plugins et les plugins doivent connaître la même interface.
Si par exemple vous avez copié/collé le code de votre interface et qu'il
trouve en double dans les assemblies, alors les 2 interfaces sont
considérées comme étant 2 classes différentes. Pour éviter ceci, le plus
simple est de créer une assembly contenant votre interface et d'utiliser
références à cette assembly.
--
Zazar
Bonjour,
> Il faut bien caster vers l'interface utilisée par mes plugins, non ?
Oui mais il faut faire attention à un point de détail important :
qui charge les plugins et les plugins doivent connaître la même interface.
Si par exemple vous avez copié/collé le code de votre interface et qu'il
trouve en double dans les assemblies, alors les 2 interfaces sont
considérées comme étant 2 classes différentes. Pour éviter ceci, le plus
simple est de créer une assembly contenant votre interface et d'utiliser
références à cette assembly.
--
Zazar