oder wasauchimmer man "scripten" will
ACHTUNG !!! Benötigt VS PRO (geht zumindest nicht mit Express!)
Wie man sieht kann man eigentlich so ziemlich jeden Schweinkram damit machen. Einfach mal rumspielen
NACHTRAG:
Bitte aufpassen, wenn man direkt Benutzereingaben übernimmt! Schließlich gehts hier letztlich um eval() und der User könnte ja zB auch Programmcode zum Löschen von Dateien etc eingeben ...
ACHTUNG !!! Benötigt VS PRO (geht zumindest nicht mit Express!)
VB.NET-Quellcode
- '
- ' Orignal in C#:
- ' http://www.gamedev.net/community/forums/topic.asp?topic_id=264462
- ' Abgewandelt in VB
- '
- Imports Microsoft.VisualBasic
- Imports System.CodeDom
- Imports System.CodeDom.Compiler
- Public Class NetScripter
- Public Sub Test()
- Dim d As Double = DoCalc("1 + 4 * (2^0.5)")
- Debug.Print(d)
- End Sub
- Public Function DoCalc(ByVal mathexp As String) As Double
- Dim scr As New System.Text.StringBuilder
- scr.AppendLine("Public Class DummyClass")
- scr.AppendLine("Public Shared Function DoCalc() As Double")
- scr.AppendLine("Return " & mathexp)
- scr.AppendLine("End Function")
- scr.AppendLine("End Class")
- Dim res As CompilerResults = ExecuteScript(scr.ToString)
- Return res.CompiledAssembly.GetType("DummyClass").GetMethod("DoCalc").Invoke(Nothing, Nothing)
- End Function
- Public Shared Function ExecuteScript(ByVal scripttext As String) As CompilerResults
- Dim codeProvider As CodeDomProvider = CodeDomProvider.CreateProvider("VisualBasic")
- Dim codeCompiler As ICodeCompiler = codeProvider.CreateCompiler
- Dim params As New CompilerParameters
- With params
- .GenerateExecutable = False
- .GenerateInMemory = True
- .IncludeDebugInformation = False
- .TreatWarningsAsErrors = False
- .ReferencedAssemblies.Add("system.dll")
- .ReferencedAssemblies.Add("System.Windows.Forms.dll")
- End With
- Dim results As CompilerResults = codeCompiler.CompileAssemblyFromSource(params, scripttext)
- If results.Errors.Count = 0 Then
- Else
- ' irgendeine Fehlerbehandlung
- Throw New Exception("mupf!")
- End If
- Return results
- End Function
- End Class
Wie man sieht kann man eigentlich so ziemlich jeden Schweinkram damit machen. Einfach mal rumspielen
NACHTRAG:
Bitte aufpassen, wenn man direkt Benutzereingaben übernimmt! Schließlich gehts hier letztlich um eval() und der User könnte ja zB auch Programmcode zum Löschen von Dateien etc eingeben ...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()