VB.NET Codecompiler (altes Projekt)

    • Beta

    Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von kevin89.

      VB.NET Codecompiler (altes Projekt)

      Hallo,

      ich habe einen kleinen VB Codecompiler geschrieben, mit ihm ist es möglich, VB Code während der Laufzeit auszuführen.

      Verwendete VB-Version: VB 2008
      Benötigt Framework 3.5

      Screenshot:



      Da es hauptsächlich um den Code des Programms geht, den ich bald öffentlich vorstellen werde, ist das Programm sehr schlicht gemacht, dient ja hier auch nur als Demo. Jeder VB-Befehl lässt sich damit ganz normal ausführen, hier mal ein Code mit dem ihr das testen könnt:

      VB.NET-Quellcode

      1. Module Module1
      2. Sub Main()
      3. System.Console.WriteLine("Mit dem Vb Codecompiler kompilierter Source!")
      4. Console.Writeline("Zahl eingeben: ")
      5. Do Until IsNumeric(Console.Readline)=True
      6. Console.Writeline("Zahl eingeben: ")
      7. Loop
      8. Console.Writeline("Zahl gültig.")
      9. System.Console.ReadLine()
      10. SchreibHallo()
      11. End Sub
      12. Sub SchreibHallo()
      13. Console.Writeline("Hallo!")
      14. Console.Read
      15. End Sub
      16. End Module


      Ein besonderes Dankeschön an Auvid, für den Ansatz.

      Download hier (18 Kb)
      Hier gehts zum Code

      Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von „kevin89“ ()

      Bei mir und noch zwei anderen geht´s wunderbar. Hast du XP oder Vista?

      Bei normalen Codes reicht es nicht einfach zb "Msgbox("test") zu schreiben sondern es muss

      VB.NET-Quellcode

      1. Module Test
      2. Sub Main()
      3. Msgbox("test")
      4. End Sub
      5. End Module

      heißen (ist ja auch logisch)

      Hier noch einige kleine Beispielcodes zum testen:

      -> Ein Minicode, der zwei Msgboxen ausgibt:

      VB.NET-Quellcode

      1. Module Test
      2. Sub Main()
      3. Msgbox("test")
      4. Sagnochwas
      5. End Sub
      6. Sub Sagnochwas()
      7. Msgbox("hallo")
      8. End Sub
      9. End Module

      -> Ein Minicode, der einen mit Namen begrüßt:

      VB.NET-Quellcode

      1. Module Test
      2. Sub Main()
      3. Console.Write("Dein Name: ")
      4. Dim name As String = Console.Readline
      5. Msgbox("Hallo " & name)
      6. End Sub
      7. End Module

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kevin89“ ()

      Geht echt einwandtfrei bei mir :D

      Framework 3.5 ist drauf? Guck mal ob es den Ordner "C:\WINDOWS\Microsoft.NET\Framework\v3.5" bei dir gibt.

      Probier nochmal die Beispielskripte

      Hier nochmal ein Beispiel wie zb eine Funktion geht:

      VB.NET-Quellcode

      1. Module Test
      2. Sub Main()
      3. Msgbox(test(False))
      4. End Sub
      5. Function test(Byval true2 As Boolean)
      6. If true2=True Then
      7. Return "True"
      8. Else
      9. Return "False"
      10. End If
      11. End Function
      12. End Module


      ACHTUNG!!! An alle Vista-Nutzer! Das Programm funktioniert gerade noch nicht, weil es einen Zugriffsfehler meldet (das Programm schreibt in Root, also direkt "C:\" und das ist verboten)! Ich versuch das schnell wegzumachen.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kevin89“ ()

      Guuuut ^^
      Hier noch ein paar weitere Codes zum testen:

      Zählen von 1 bis 1 Million:

      VB.NET-Quellcode

      1. Module MyModule
      2. Sub Main()
      3. For i=1 to 100000
      4. Console.Writeline(i)
      5. Next
      6. End Sub
      7. End Module

      Logarithmus oder wie das Ding heißt:

      VB.NET-Quellcode

      1. Module MyModule
      2. Sub Main()
      3. Console.Writeline(Math.Log(50))
      4. Console.Read
      5. End
      6. End Sub
      7. End Module

      gibt viele Möglichkeiten.

      Den Source werde ich wie gesagt bald öffentlich für jeden in den Sourcecodeaustausch stellen. Auch ein C# Compiler ist möglich mit dieser Methode. Das kompilieren selbst (ihr werdet es nicht glauben) passiert mit einem Einzeiler!!! :D
      @ hutteric: nein, ich hab es anders gemacht. Die Lösung von dem Typen da ist ziemlich schlecht. Meine Lösung habe ich selbst entwickelt ;)
      @ magerquark: Hä das kapier ich iwie net sorry :D

      Aso weiß warum der Fehler auftritt, habe dummerweise überall "C:\" als Festplatte reingeschrieben

      kevin89 schrieb:

      Meine Lösung habe ich selbst entwickelt ;)

      Darauf wollte ich anspielen.
      Ich will dich ja nicht irgendwie verpfeifen und kann auch sein, dass ich total aufm holzweg bin, aber deine Lösung
      hat dir doch Auvid auf dem Silbertablett serviert, und du hast sie nicht selber entwickelt, oder hab ich was verpasst?
      [VB 2008] .exe Datei erstellen.

      Edit:
      Erst grad eben dein Dank an Auvid geshen, hast den editiert? Wenn nicht nehm ich alles zurück und kauf mir demnächst ne Brille
      So long, magerquark
      Ein besonderes Dankeschön an Auvid, für den einfach genialen Ansatz.

      es war wirklich nur ein Ansatz, denn das hat noch nicht gereicht.

      Edit: Zu deinem Edit: Nein, habe ich nicht editiert, stand von Anfang an da gut lesbar drin.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kevin89“ ()

      Ja schön - nur muss dazu erst eine Textdatei auf der Festplatte erzeugt werden. Das will ich nicht. Mit der anderen Lösung kann man einfach einen String kompilieren - und muss dazu nicht einmal eine externe Datei ausführen, sondern lässt das .NET-Framework alles machen. Diese Methode ist wesentlich sauberer.
      Ich will mir auch gar nicht anmaßen den Code zu kritisieren, aber ich persönlich finde einen schicken Einzeiler doch um einiges besser.

      Außerdem wenn man beispielsweise ein Addinsystem mit meiner Methode programmieren will, kann man den kompletten Code einfach aus der externen vb-Datei laden.
      Die Vb-Datei die für die Lösung nötig ist, finde ich gar nicht schlimm bzw. sehe ich sogar als Vorteil.