Bekijk de onderstaande video om te zien hoe je onze site als een web app op je startscherm installeert.
Opmerking: Deze functie is mogelijk niet beschikbaar in sommige browsers.
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.CodeDom.Compiler;
using System.Reflection;
namespace HelpMij
{
static class EvaluateMathExpression
{
private EvaluateMathExpression() {}
public static double Evaluate(string math)
{
string sCode = MaakCode(math);
Assembly ass = MaakAssembly(sCode);
if (ass != null)
{
Type type = ass.GetType("Berekenen.MathEvaluation", false, true);
return getResult(type);
}
return 100/0;
}
private static double getResult(Type type)
{
object o = Activator.CreateInstance(type);
double result = (double)(((double)type.InvokeMember("CalcExpression", BindingFlags.InvokeMethod, null, o, null)));
return result;
}
private static string MaakCode(string function)
{
string s = "";
s += "namespace Berekenen\n";
s += "{\n";
s += "public class MathEvaluation\n";
s += "{\n";
s += "public double CalcExpression()\n";
s += "{\n";
s += "return " + function + "\n";
s += "}\n";
s += "}\n";
s += "}";
return s;
}
private static Assembly MaakAssembly(string code)
{
CompilerParameters param = new CompilerParameters();
param.GenerateExecutable = false;
param.GenerateInMemory = true;
string sTaal = CodeDomProvider.GetLanguageFromExtension(".cs");
CodeDomProvider prov = CodeDomProvider.CreateProvider(sTaal);
CompilerResults res = prov.CompileAssemblyFromSource(param, code);
string errors = "";
foreach (CompilerError error in res.Errors)
{
errors += error.ErrorText + "\n";
}
if (errors == "")
{
return res.CompiledAssembly;
}
else
{
MessageBox.Show(errors);
return null;
}
}
}
}
Dim Result As Double = HelpMij.EvaluateMathExpression.Evaluate(textbox1.text)
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Text
Imports System.Windows.Forms
Imports System.CodeDom.Compiler
Imports System.Reflection
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Result As Double = HelpMij.EvaluateMathExpression.Evaluate("(5*3)/10")
MsgBox(Result)
End Sub
End Class
Namespace HelpMij
Friend NotInheritable Class EvaluateMathExpression
Private Sub New()
MyBase.New()
End Sub
Public Shared Function Evaluate(ByVal math As String) As Double
Dim sCode As String = MaakCode(math)
Dim ass As System.Reflection.Assembly = MaakAssembly(sCode)
If ass IsNot Nothing Then
Dim type As Type = ass.GetType("Berekenen.MathEvaluation", False, True)
Return getResult(type)
End If
Return 100
End Function
Private Shared Function getResult(ByVal type As Type) As Double
Dim o As Object = Activator.CreateInstance(type)
Dim result As Double = CDbl((CDbl(type.InvokeMember("CalcExpression", BindingFlags.InvokeMethod, Nothing, o, Nothing))))
Return result
End Function
Private Shared Function MaakCode(ByVal [function] As String) As String
Dim s As String = ""
s &= "Namespace Berekenen" & Constants.vbLf
s &= Constants.vbLf
s &= "Public Class MathEvaluation" & Constants.vbLf
s &= Constants.vbLf
s &= "Public Function CalcExpression() As Double " & Constants.vbLf
s &= Constants.vbLf
s &= "Return " & [function] & Constants.vbLf
s &= Constants.vbLf
s &= "End Function" & Constants.vbLf
s &= Constants.vbLf
s &= "End Class"
s &= Constants.vbLf
s &= "End Namespace"
Return s
End Function
Private Shared Function MaakAssembly(ByVal code As String) As System.Reflection.Assembly
Dim param As New CompilerParameters()
param.GenerateExecutable = False
param.GenerateInMemory = True
Dim sTaal As String = CodeDomProvider.GetLanguageFromExtension(".vb")
Dim prov As CodeDomProvider = CodeDomProvider.CreateProvider(sTaal)
Dim res As CompilerResults = prov.CompileAssemblyFromSource(param, code)
Dim errors As String = ""
For Each [error] As CompilerError In res.Errors
errors &= [error].ErrorText + Constants.vbLf
Next [error]
If errors = "" Then
Return res.CompiledAssembly
Else
MessageBox.Show(errors)
Return Nothing
End If
End Function
End Class
End Namespace
We gebruiken essentiële cookies om deze site te laten werken, en optionele cookies om de ervaring te verbeteren.