OVH Cloud OVH Cloud

[Urgent] Pb de casting depuis une interface (assembly chargée dynamiquement)

5 réponses
Avatar
Cédric Girard
Bonjour

Toujours mes petits soucis d'implémentation de plugins ; je vois le bout
puisque ne subsiste plus qu'une erreur de casting lorsque j'essaye
d'utiliser mon instance d'objet "plug-in" !

Mon interface est "classique", avec uniquement 4 propriétés (en lecture
seule, permettant de récupérer des indications sur la nature du plug-in
ainsi qu'une icône) plus une méthode permettant de "lancer" le plug-in (en
WinForms).

Chaque plug-in implémente donc cette interface et dispose d'un constructeur.

J'appelle mes plugins en scannant le répertoire les contenant puis en
vérifiant les types disponibles dans chaque assembly avec vérif de
concordance avec mon interface. Le cas échéant je fais un CreateInstance sur
l'assembly, qui passe sans soucis.

C'est alors que survient mon problème : lorsque j'essaye d'appeler une
méthode (ou une propriété) de mon objet instancié avec un casting
"classique" sur l'interface, il me refuse le cast !

Try
Dim _Obj As Object = _oAss.CreateInstance( _
_oType.Namespace & "." & _oType.Name) '
MsgBox(CType(_Obj, MonNameSpace.iPlugin).UnePropriété()) '<<<<<<<< ICI
Catch ex As Exception
MsgBox(ex.Message)
End Try

Pitié une solution !!! Tout le reste fonctionne... :-[


--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr

5 réponses

Avatar
AlexC
MonNamespace.IPlugin c'est bien l'interface de test plugins ?

Si tu fait un Imports IPlugin

et ensuite :

Dim MonInstance as IPlugin
MonInstance = CType(_Obj, iPlugin)
MonInstance.MaPropriete

ca marche pas ?
decortique ton code au lieu de tout faire usr une ligne quand ca bug ca
permet de retrouver plus facilement l'erreur

"Cédric Girard" a écrit dans le message de news:

Bonjour

Toujours mes petits soucis d'implémentation de plugins ; je vois le bout
puisque ne subsiste plus qu'une erreur de casting lorsque j'essaye
d'utiliser mon instance d'objet "plug-in" !

Mon interface est "classique", avec uniquement 4 propriétés (en lecture
seule, permettant de récupérer des indications sur la nature du plug-in
ainsi qu'une icône) plus une méthode permettant de "lancer" le plug-in (en
WinForms).

Chaque plug-in implémente donc cette interface et dispose d'un


constructeur.

J'appelle mes plugins en scannant le répertoire les contenant puis en
vérifiant les types disponibles dans chaque assembly avec vérif de
concordance avec mon interface. Le cas échéant je fais un CreateInstance


sur
l'assembly, qui passe sans soucis.

C'est alors que survient mon problème : lorsque j'essaye d'appeler une
méthode (ou une propriété) de mon objet instancié avec un casting
"classique" sur l'interface, il me refuse le cast !

Try
Dim _Obj As Object = _oAss.CreateInstance( _
_oType.Namespace & "." & _oType.Name) '
MsgBox(CType(_Obj, MonNameSpace.iPlugin).UnePropriété()) '<<<<<<<<


ICI
Catch ex As Exception
MsgBox(ex.Message)
End Try

Pitié une solution !!! Tout le reste fonctionne... :-[


--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr




Avatar
Cédric Girard
Merci

Je viens en fait d'avoir la solution dans un précédent message, un truc
vraiment "débile" de ma part : j'avais recopié mon interface dans chacun des
modules plutôt que de la générer à part et la référencer dans mes différents
projets !!!

Forcément ça ne fonctionnait pas bien...

Maintenant ça marche super, merci à tous !!!

--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr




"AlexC" <(@Anti-Spam)#(@Anti-Spam)#> a écrit
dans le message de news:
MonNamespace.IPlugin c'est bien l'interface de test plugins ?

Si tu fait un Imports IPlugin

et ensuite :

Dim MonInstance as IPlugin
MonInstance = CType(_Obj, iPlugin)
MonInstance.MaPropriete

ca marche pas ?
decortique ton code au lieu de tout faire usr une ligne quand ca bug ca
permet de retrouver plus facilement l'erreur

"Cédric Girard" a écrit dans le message de news:

> Bonjour
>
> Toujours mes petits soucis d'implémentation de plugins ; je vois le bout
> puisque ne subsiste plus qu'une erreur de casting lorsque j'essaye
> d'utiliser mon instance d'objet "plug-in" !
>
> Mon interface est "classique", avec uniquement 4 propriétés (en lecture
> seule, permettant de récupérer des indications sur la nature du plug-in
> ainsi qu'une icône) plus une méthode permettant de "lancer" le plug-in


(en
> WinForms).
>
> Chaque plug-in implémente donc cette interface et dispose d'un
constructeur.
>
> J'appelle mes plugins en scannant le répertoire les contenant puis en
> vérifiant les types disponibles dans chaque assembly avec vérif de
> concordance avec mon interface. Le cas échéant je fais un CreateInstance
sur
> l'assembly, qui passe sans soucis.
>
> C'est alors que survient mon problème : lorsque j'essaye d'appeler une
> méthode (ou une propriété) de mon objet instancié avec un casting
> "classique" sur l'interface, il me refuse le cast !
>
> Try
> Dim _Obj As Object = _oAss.CreateInstance( _
> _oType.Namespace & "." & _oType.Name) '
> MsgBox(CType(_Obj, MonNameSpace.iPlugin).UnePropriété()) '<<<<<<<<
ICI
> Catch ex As Exception
> MsgBox(ex.Message)
> End Try
>
> Pitié une solution !!! Tout le reste fonctionne... :-[
>
>
> --
> Cédric Girard
> OCERA CFGA (Aube)
> Mon site perso : http://www.mainecoon.fr
>
>




Avatar
c2i-Richard Clark [MVP]
tu participe au concours : OhLeBoulet.com ? ;-))))))))))))

--
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:
Merci

Je viens en fait d'avoir la solution dans un précédent message, un truc
vraiment "débile" de ma part : j'avais recopié mon interface dans chacun


des
modules plutôt que de la générer à part et la référencer dans mes


différents
projets !!!

Forcément ça ne fonctionnait pas bien...

Maintenant ça marche super, merci à tous !!!

--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr




"AlexC" <(@Anti-Spam)#(@Anti-Spam)#> a écrit
dans le message de news:
> MonNamespace.IPlugin c'est bien l'interface de test plugins ?
>
> Si tu fait un Imports IPlugin
>
> et ensuite :
>
> Dim MonInstance as IPlugin
> MonInstance = CType(_Obj, iPlugin)
> MonInstance.MaPropriete
>
> ca marche pas ?
> decortique ton code au lieu de tout faire usr une ligne quand ca bug ca
> permet de retrouver plus facilement l'erreur
>
> "Cédric Girard" a écrit dans le message de news:
>
> > Bonjour
> >
> > Toujours mes petits soucis d'implémentation de plugins ; je vois le


bout
> > puisque ne subsiste plus qu'une erreur de casting lorsque j'essaye
> > d'utiliser mon instance d'objet "plug-in" !
> >
> > Mon interface est "classique", avec uniquement 4 propriétés (en


lecture
> > seule, permettant de récupérer des indications sur la nature du


plug-in
> > ainsi qu'une icône) plus une méthode permettant de "lancer" le plug-in
(en
> > WinForms).
> >
> > Chaque plug-in implémente donc cette interface et dispose d'un
> constructeur.
> >
> > J'appelle mes plugins en scannant le répertoire les contenant puis en
> > vérifiant les types disponibles dans chaque assembly avec vérif de
> > concordance avec mon interface. Le cas échéant je fais un


CreateInstance
> sur
> > l'assembly, qui passe sans soucis.
> >
> > C'est alors que survient mon problème : lorsque j'essaye d'appeler une
> > méthode (ou une propriété) de mon objet instancié avec un casting
> > "classique" sur l'interface, il me refuse le cast !
> >
> > Try
> > Dim _Obj As Object = _oAss.CreateInstance( _
> > _oType.Namespace & "." & _oType.Name) '
> > MsgBox(CType(_Obj, MonNameSpace.iPlugin).UnePropriété())


'<<<<<<<<
> ICI
> > Catch ex As Exception
> > MsgBox(ex.Message)
> > End Try
> >
> > Pitié une solution !!! Tout le reste fonctionne... :-[
> >
> >
> > --
> > Cédric Girard
> > OCERA CFGA (Aube)
> > Mon site perso : http://www.mainecoon.fr
> >
> >
>
>




Avatar
Cédric Girard
Salut Richard

Attends c'est pas fini ;-)

En fait après 4 mois d'interruption totale de code (je travaillais ma base
de données sous SQL 2000, les joies des procédures stockées et autres
joyeusetés...) j'avoue avoir un peu de mal à m'y remettre...

Tiens, un autre problème : utilisation d'une ressource incorporée à
l'assembly de mes plugins (tiens tiens... ça te rappelle pas un de tes
articles ça ?) mais sous forme d'icône.

Et ça marche pô non plus... Pffff.... Je suis vraiment le boulet de l'été
;-)


Mon icône (format 48x48 pixels, 256 couleurs) est désignée comme "Ressource
incorporée" dans mon projet.

'Retourne l'icône représentative du module
Public Function Icone() As System.Drawing.Icon Implements iPlugin.Icone

'Déclaration des variables locales
Dim _Asm As System.Reflection.Assembly System.Reflection.Assembly.GetExecutingAssembly
Dim _Img As Icon = New
Icon(_Asm.GetManifestResourceStream("GICalc._calc.ico"))

Return _Img 'Retourne l'icône intégrée

_Img.Dispose() 'Libération des ressources

End Function


Qu'ai-je oublié ???


--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr
Avatar
Cédric Girard
Bon j'ai trouvé.

Le roi des boulets :-) mais j'arrive à me traîner tout seul, donc ça va !

En fait chacun de mes plugins n'a pas de namespace propre puisqu'il est
indiqué dans le code au niveau de la classe implémentant mon interface. Au
niveau des propriétés du projet, point de namespace => la syntaxe correcte
(et fonctionnelle) est la suivante :

Dim _Img As Icon = New _
Icon(_Asm.GetManifestResourceStream("_calc.ico"))

Tout simplement !!!

Voili voilà, bonne fin de semaine à toutes et à tous !
--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr



"Cédric Girard" a écrit dans le message de
news:
Salut Richard

Attends c'est pas fini ;-)

En fait après 4 mois d'interruption totale de code (je travaillais ma base
de données sous SQL 2000, les joies des procédures stockées et autres
joyeusetés...) j'avoue avoir un peu de mal à m'y remettre...

Tiens, un autre problème : utilisation d'une ressource incorporée à
l'assembly de mes plugins (tiens tiens... ça te rappelle pas un de tes
articles ça ?) mais sous forme d'icône.

Et ça marche pô non plus... Pffff.... Je suis vraiment le boulet de l'été
;-)


Mon icône (format 48x48 pixels, 256 couleurs) est désignée comme


"Ressource
incorporée" dans mon projet.

'Retourne l'icône représentative du module
Public Function Icone() As System.Drawing.Icon Implements iPlugin.Icone

'Déclaration des variables locales
Dim _Asm As System.Reflection.Assembly > System.Reflection.Assembly.GetExecutingAssembly
Dim _Img As Icon = New
Icon(_Asm.GetManifestResourceStream("GICalc._calc.ico"))

Return _Img 'Retourne l'icône intégrée

_Img.Dispose() 'Libération des ressources

End Function


Qu'ai-je oublié ???


--
Cédric Girard
OCERA CFGA (Aube)
Mon site perso : http://www.mainecoon.fr