Imports System.CodeDom.Compiler
Module Globals
Public Function CreateEvaluator(ByVal Expression As String) As Object
Dim Code As String = _
"Imports Microsoft.VisualBasic" & vbCrLf & _
"Imports System" & vbCrLf & _
"Imports System.Math" & vbCrLf & _
"Public Class Evaluator" & vbCrLf & _
" Public Function Evaluate(ByVal X As Double) As Double" & vbCrLf & _
" Return " & Expression.Replace(",", ".") & vbCrLf & _
" End Function" & vbCrLf & _
"End Class" & vbCrLf
Dim Parameters As New CodeDom.Compiler.CompilerParameters
With Parameters
.GenerateExecutable = False
.IncludeDebugInformation = True
.TempFiles.KeepFiles = True
.GenerateInMemory = False
#Else
.TreatWarningsAsErrors = True
.TempFiles.KeepFiles = False
.GenerateInMemory = True
#End If
.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
.ReferencedAssemblies.Add("System.dll")
End With
Dim Provider As New VBCodeProvider
Dim CompResults As CompilerResults = Provider.CompileAssemblyFromSource(Parameters, Code)
If CompResults.Errors.Count > 0 Then
Dim Msg As String = ""
For Each Err As CompilerError In CompResults.
Errors
Msg
&= Err.
ToString & vbCrLf
Next
Throw New ArgumentException("Espressione non valida!")
Else
Dim Asm As Reflection.Assembly = CompResults.CompiledAssembly
Dim Evaluator As Object = Asm.CreateInstance("Evaluator")
Return Evaluator
End If
End Function
Public Function Evaluate(ByVal Evaluator As Object, ByVal Value As Double) As Double
Dim Result As Object = Evaluator.Evaluate(Value)
Return CDbl(Result)
End Function
End Module