Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VB.NET] MustInheritable classe...

La référence d'objet n'est pas définie à une instance d'obje

Sujet résolu
    13 mars 2011 à 20:04:20

    Bonjour,

    Après avoir cherché plus de deux heures et avoir perdu une bonne dizaine de cheveux, je viens vous demander de l'aide chers amis codeurs :-° .

    Voilà, donc j'essaie de compiler du code VB.NET et de l'utiliser directement grâce à la Reflection, tout ça dans un exécutable compilé avec CodeDom.

    Voici le code :
    Dim MyCompilerResults As CompilerResults = CodeDomCompiler.GenerateLibrary(My.Resources.Source, "v2.0") 'Contient les résultats de la compilation à partir de ma source
    Dim MyAssembly As Assembly = MyCompilerResults.CompiledAssembly 'Contient l'assembly VB.NET compilé
    Dim MyAssemblyInstance As Object = MyAssembly.CreateInstance("MainNamespace.MainClass") 'Je crée une instance de ma classe
    Dim MyInstanceType As Type = MyAssemblyInstance.GetType() 'J'obtiens son type : ERREUR La référence d'objet n'est pas définie à une instance d'objet
    Dim MyMethodInfo As MethodInfo = MyInstanceType.GetMethod("SaySomething") 'J'obtiens la méthode "SaySomething" dans la classe "MainClass"
    Dim Result As Object = MyMethodInfo.Invoke(MyAssemblyInstance, New Object() {"Huhu"}) 'J'invoque la méthode en lui passant en paramètre "Huhu"
    


    Vous pouvez essayer ce code sous Visual Studio, il fonctionnera parfaitement (à part que vous n'avez pas la classe CodeDomCompiler avec laquelle je compile ma source).

    Le problème c'est que j'exécute ce code dans un exécutable compilé avec CodeDom. Certains d'entre vous le savent peut-être, mais CodeDom est très capricieux (il faut importer tous les espaces de noms etc).

    Et là quoi que je fasse il m'embête (je me contiens) avec cette instance d'objet alors que sous Visual Studio ça fonctionne parfaitement. Je pense que le problème vient du fait que la classe Type est MustInherit.


    Si quelqu'un veut bien me venir en aide, s'il vous plaît :-°:-°
    • Partager sur Facebook
    • Partager sur Twitter
      13 mars 2011 à 21:10:34

      A priori ça n'a rien à voir avec Type, c'est simplement que MyAssembly.CreateInstance("MainNamespace.MainClass") renvoie Nothing.

      Le tout est de savoir pourquoi :euh: Cette méthode renvoie Nothing lorsqu'elle ne parvient pas à trouver le type spécifié (MainNamespace.MainClass) dans cet assembly. C'est peut-être dû à une dépendance manquante, ou à une restriction de sécurité (pour empêcher d'exécuter du code potentiellement dangereux) :(
      • Partager sur Facebook
      • Partager sur Twitter
        13 mars 2011 à 21:23:03

        Que tu es intelligent Orwell :waw: ! (En fait c'est plutôt que je n'ai pas dormis cette nuit et que je suis débile.)

        En effet, j'avais un problème dans les ressources. Je m'étais trompé dans le nom et la source n'existait donc pas. J'ai corrigé, et ça fonctionne !

        N'empêche j'ai passé 2 heures (voir plus) sur un problème qui n'existait pas... Le temps que j'ai pas perdu :-° ...

        Merci :) !
        • Partager sur Facebook
        • Partager sur Twitter

        [VB.NET] MustInheritable classe...

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown