IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Créer une instance d'une classe à partir de son nom


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de katoyi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Points : 75
    Points
    75
    Par défaut Créer une instance d'une classe à partir de son nom
    Bonjour,
    Voila, j'ai déclaré une interface avec laquelle j'ai écrit plusieurs classes. Les noms de ces classes se trouvent dans un fichier XML. Je parcourt ce fichier et je récupère les noms, je dois donc instancier ces classes puis faire un cast vers l'interface afin de pouvoir les utiliser. Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Dim asm As Assembly = Assembly.LoadFrom("emplacement_de_la_dll")
    classNorme = "nom_de_la_classe"
    pathnorme = "nom_complet_de_la_classe"
        Try
            type = asm.GetType(pathnorme)
            obj = type.InvokeMember(classNorme, BindingFlags.CreateInstance, Nothing, Nothing, Nothing)
            instanceInorme = CType(obj, INorme)
            returnValue = instanceInorme.Verify(nomfichier, RequeteText)
            If returnValue = 0 Then
                 streader.WriteLine(nomfichier)
                 streader.WriteLine(typenorme & " : " & instanceInorme.getError)
            End If
        Catch ex As Exception
              MsgBox("Exception " & classNorme & " : " & ex.Message)
        End Try
    J'ai beau essayer de l'exécuter, cela ne marche pas. L'erreur survient au niveau du cast.
    Quelqu'un connait la source du problème.
    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    Bonjour,

    Quelle erreur affiche t-il ?
    "La Bretagne, ça vous gagne !!!"

  3. #3
    Membre régulier Avatar de katoyi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Points : 75
    Points
    75
    Par défaut
    impossible d'effectuer un cast d'un objet de type 'le nom de la classe' en type 'nom de l'interface'

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    tu as ta réponse, tu essayes de caster une classe en interface.
    tu peux essayer quelques choses du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Dim asm As Assembly = System.Reflection.Assembly.LoadFile(assemblyName)
    t = assembly.GetType("MonType")
    obj = Activator.CreateInstance(t, New Object() {"Eventuel parametre du contructeur"})
    obj.MaFonction()
    "La Bretagne, ça vous gagne !!!"

  5. #5
    Membre régulier Avatar de katoyi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Points : 75
    Points
    75
    Par défaut
    J'ai essayé ton code, il m'affiche la même erreur. J'ai débugé et j'ai remarqué qu'au niveau de la création de l'objet, rien ne se passe. L'objet n'est pas créé. As tu une idée de ce qui peut bien se passer?
    Merci.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    C'est obj qui est a nothing ? si c'est le cas, tu ne dois pas saisir correctement le nom de ta classe. Est ce que ta classe a un namespace ?
    Regarde en debug les propriétés de ton object "asm", il te donne les noms exacts de tes classes qui se trouve dans ta dll. (ca doit etre asm.getTypes) et tiens moi au courant.
    "La Bretagne, ça vous gagne !!!"

  7. #7
    Membre régulier Avatar de katoyi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par dudule Voir le message
    C'est obj qui est a nothing ?
    Non obj n'est pas à nothing mais il ne contient pas les méthodes présentes dans ma class.
    Citation Envoyé par dudule Voir le message
    Est ce que ta classe a un namespace ?
    Oui la classe a un namespace, le même que l'interface.

    Je ne vois pas à quel niveau je peux voir les noms des classes dans la dll en mode debug

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    Par hasard, est ce que tes methodes sont "public" ?
    sinon je vois pas trop...
    "La Bretagne, ça vous gagne !!!"

  9. #9
    Membre régulier Avatar de katoyi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Points : 75
    Points
    75
    Par défaut
    Oui toutes les méthodes sont public.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    Quelles sont les propriétés de ton objet "obj" ?
    "La Bretagne, ça vous gagne !!!"

  11. #11
    Membre régulier Avatar de katoyi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Points : 75
    Points
    75
    Par défaut
    J'ai résolu le problème mais je ne suis pas convaincu du fait que ca ne marchait pas.

    Premièrement, ce que j'ai fait c'est de charger ma dll à parir d'un emplacement. Donc c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim asm As Assembly = Assembly.LoadFile(emplacement)
    Et cela ne marchait pas.
    Finalement, j'étais obligé d'ajouter la dll à mon projet (référence) et de la charger comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim asm As Assembly = Assembly.Load("Librairie")
    Et ca marché.

    Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Instancier une classe à partir de son nom?
    Par nabil148911 dans le forum Langage
    Réponses: 5
    Dernier message: 13/01/2009, 02h00
  2. Réponses: 9
    Dernier message: 26/09/2007, 16h18
  3. Réponses: 6
    Dernier message: 06/04/2007, 21h20
  4. Réponses: 5
    Dernier message: 09/03/2007, 21h14
  5. Réponses: 7
    Dernier message: 29/11/2006, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo