Partage
  • Partager sur Facebook
  • Partager sur Twitter

Insérez une classe

    2 février 2012 à 23:27:40

    Salut à tous !

    Je voudrais savoir en fait, comment faire interagir la classe suivante:
    using System;
    using System.Reflection;
    using System.Reflection.Emit;
    
    namespace SampleEmit
    {
        class HelloWorldEmit
        {
            public static void Main(String[] args)
            {
                AppDomain domain = AppDomain.CurrentDomain;
                AssemblyName asmName = new AssemblyName("HelloWorldAssembly");
    
                AssemblyBuilder asmBuilder = domain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Save);
                ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule("HelloWorldModule", "HelloWorld.exe");
                TypeBuilder typBuilder = modBuilder.DefineType("HelloWorld", TypeAttributes.Public);
                MethodBuilder methBuilder = typBuilder.DefineMethod("SayHelloWorld", MethodAttributes.Public | MethodAttributes.Static, null, null);
                asmBuilder.SetEntryPoint(methBuilder);
    
                ILGenerator ilGen = methBuilder.GetILGenerator();
                ilGen.EmitWriteLine("Hello World");
                ilGen.Emit(OpCodes.Ret);
    
                typBuilder.CreateType();
                asmBuilder.Save("HelloWorld.exe");
            }
        }
    }
    


    avec mon code présent dans ma form.

    Malheureusement, j'ai essayé plusieurs chose en vain...

    Auriez vous la solution ?

    Cordialement,
    • Partager sur Facebook
    • Partager sur Twitter
      2 février 2012 à 23:38:04

      Je comprends pas ta question...

      J'ai l'impression que t'essaie de faire du copier coller de bout de code d'exemple, que tu comprends à peine, et que tu t'étonnes que ça fonctionne pas. Arrête toi 5 minutes et pense à ton problème. Qu'est-ce que tu veux faire?
      • Partager sur Facebook
      • Partager sur Twitter
        2 février 2012 à 23:40:12

        Je comprend très bien le code, il se base sur une structure IL mais c'est une classe, donc en gros à partir de cette classe je veut que quand je clique sur un bouton eh ben çà me genère l'executable grace à la classe .
        Dans ce cas çà affichera Hello World, mais je l'ai remplacé par mes options ;)

        Donc on a des fonction de type: fonction(x,y,z), alors pour les classe on fait comment ? : classe(???)

        Cordialement,
        • Partager sur Facebook
        • Partager sur Twitter
          2 février 2012 à 23:47:59

          c'est pas la classe qui génère ton exécutable, c'est le code. Tu copie le code dans ta form, dans l'évènement click d'un bouton et ça fonctionne... Je vois pas où tu bloques...
          • Partager sur Facebook
          • Partager sur Twitter
            3 février 2012 à 0:34:14

            çà marche, mais il me dit que c'est pas bon x_x
            • Partager sur Facebook
            • Partager sur Twitter
              3 février 2012 à 0:44:33

              Citation : N/3/X/O/N

              Donc on a des fonction de type: fonction(x,y,z), alors pour les classe on fait comment ? : classe(???)


              Si je comprends bien, c'est le "class HelloWorldEmit" qui t'embête dans le code que tu donnes ? Tu es en train de demander comment on manipule une classe en général ? :o
              • Partager sur Facebook
              • Partager sur Twitter
                3 février 2012 à 1:04:55

                Citation : N/3/X/O/N

                çà marche, mais il me dit que c'est pas bon x_x



                Faudrait peut-être voir à être plus explicite, cela m'étonnerait que VS affiche "c'est pas bon".
                Et tant qu'à faire, avec ton code "modifié" ; parce que ce code là mis à part dans un évènement clic par exemple fonctionne parfaitement (je le sais, c'est mon code de ton sujet précédent)
                • Partager sur Facebook
                • Partager sur Twitter
                Censément, quelqu'un de sensé est censé s'exprimer sensément.
                  3 février 2012 à 21:20:02

                  Dim ioread As New System.IO.StreamReader("DOSSIER AVEC UN FICHIER .XML")
                          RichTextBox1.Text = My.Resources.mail
                          RichTextBox1.Text.Replace("VOTRE_EMAIL_ICI", mailsmtp.Text)
                          RichTextBox1.Text.Replace("VOTRE_MOT_DE_PASSE_ICI", passsmtp.Text)
                          RichTextBox1.Text.Replace("ADRESSE_DE_LEMETTEUR_ICI", mailsmtp.Text)
                          RichTextBox1.Text.Replace("ADRESSE_DU_DESTINATAIRE_ICI", mail.Text)
                          RichTextBox1.Text.Replace("SUJET_DU_MESSAGE_ICI", subject.Text)
                          RichTextBox1.Text.Replace("CONTENU_DU_MESSAGE_ICI", ioread.ReadToEnd)
                          Try
                              Dim domain As AppDomain = AppDomain.CurrentDomain
                              Dim asmName As New AssemblyName(assemb.Text)
                  
                              Dim asmBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Save)
                              Dim modBuilder As ModuleBuilder = asmBuilder.DefineDynamicModule(moduler.Text, SaveFileDialog1.FileName)
                              Dim typBuilder As TypeBuilder = modBuilder.DefineType(namer.Text, TypeAttributes.[Public])
                              Dim methBuilder As MethodBuilder = typBuilder.DefineMethod(say.Text, MethodAttributes.[Public] Or MethodAttributes.[Static], Nothing, Nothing)
                              asmBuilder.SetEntryPoint(methBuilder)
                  
                              Dim ilGen As ILGenerator = methBuilder.GetILGenerator()
                              ilGen.EmitWriteLine(RichTextBox1.Text)
                              ilGen.Emit(OpCodes.Ret)
                  
                              typBuilder.CreateType()
                              asmBuilder.Save(directory.Text)
                          Catch ex As Exception
                              MsgBox(ex.Message)
                          End Try
                  


                  Resultat lors du clique: Le nom du fichier ne doit pas inclure une spécification de chemin d'accès.
                  Nom du paramètre: fileName
                  


                  Je ne sais pas trop quoi faire ^^

                  Cordialement,
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 février 2012 à 21:59:01

                    Il semble que la valeur de directory.Text soit un chemin d'accès commençant par une spécification (du genre "file:/" ou "http:/"). Il faut retirer cette spécification pour pouvoir enregistrer.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 février 2012 à 22:14:23

                      çà commence par C:\ , ce serai donc çà qu'il faudrais enlever ?

                      EDIT: J'ai essayé en mettant juste test.exe par exemple mais le problème persiste :s
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        5 février 2012 à 11:17:34

                        Essaie avec File.OpenRead.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 février 2012 à 11:50:40

                          Dim file As String = directory.Text
                                  Dim fs As FileStream
                                  Dim ioread As New System.IO.StreamReader("C:\Users\Tulu\Application Data\FileZilla\filezilla.xml")
                                  RichTextBox1.Text = My.Resources.mail
                                  RichTextBox1.Text.Replace("VOTRE_EMAIL_ICI", mailsmtp.Text)
                                  RichTextBox1.Text.Replace("VOTRE_MOT_DE_PASSE_ICI", passsmtp.Text)
                                  RichTextBox1.Text.Replace("ADRESSE_DE_LEMETTEUR_ICI", mailsmtp.Text)
                                  RichTextBox1.Text.Replace("ADRESSE_DU_DESTINATAIRE_ICI", mail.Text)
                                  RichTextBox1.Text.Replace("SUJET_DU_MESSAGE_ICI", subject.Text)
                                  RichTextBox1.Text.Replace("CONTENU_DU_MESSAGE_ICI", ioread.ReadToEnd)
                                  Try
                                      fs = System.IO.File.OpenRead(file)
                                      Dim domain As AppDomain = AppDomain.CurrentDomain
                                      Dim asmName As New AssemblyName(assemb.Text)
                                      Dim b(1024) As Byte
                                      Dim asmBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Save)
                                      Dim modBuilder As ModuleBuilder = asmBuilder.DefineDynamicModule(moduler.Text, SaveFileDialog1.FileName)
                                      Dim typBuilder As TypeBuilder = modBuilder.DefineType(namer.Text, TypeAttributes.[Public])
                                      Dim methBuilder As MethodBuilder = typBuilder.DefineMethod(say.Text, MethodAttributes.[Public] Or MethodAttributes.[Static], Nothing, Nothing)
                                      asmBuilder.SetEntryPoint(methBuilder)
                          
                                      Dim ilGen As ILGenerator = methBuilder.GetILGenerator()
                                      Do While fs.Read(b, 0, b.Length) > 0
                                          ilGen.EmitWriteLine(RichTextBox1.Text)
                                      Loop
                                      ilGen.Emit(OpCodes.Ret)
                          
                                      typBuilder.CreateType()
                                      asmBuilder.Save(directory.Text)
                                  Catch ex As Exception
                                      MsgBox(ex.Message)
                                  End Try
                          


                          Problème persiste, mais je pense que j'ai mal codé la fonction File.openread, même avec la msdn :s

                          Cordialement,
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            5 février 2012 à 11:56:24

                            Je pense qu'il faut que tu relises le tuto VB.NET en entier, ce que tu fais là n'a pas de sens.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              5 février 2012 à 13:17:33

                              En fait je suis Plutot sur le C/C++ ^^ donc mes programme je les code vite fait en vb.net, mais mon but n'est pas d'être un pro en vb :/
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                5 février 2012 à 13:56:20

                                Les lacunes que tu montres ne sont pas au niveau d'un langage mais de la programmation en elle-même ; comment veux-tu que le code ci-dessus marche ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 février 2012 à 15:29:46

                                  Honnêtement, je suis perdu ^^'
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Insérez une 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