using
System;
using System.CodeDom.Compiler;
using Microsoft.VisualBasic;
using System.Reflection;
using System.Text;
public class FuncXYCodeDomHelper
{
Assembly assy;
object execInstance;
MethodInfo method;
object [] parameters;
public string expression;
public FuncXYCodeDomHelper( string exp)
{
expression = exp;
// Generate VB Code
StringBuilder sb = new StringBuilder();
// sb.Append("Imports System/r/n");
sb.Append( " Imports System.Math/r/n " );
sb.Append( " Namespace RuntimeNamespace/r/n " );
sb.Append( " Class RuntimeClass/r/n " );
sb.Append( " Public Function f(ByVal x As Double, ByVal y As Double) As Double/r/n " );
sb.Append( " Return " + this .expression + "/r/n " );
sb.Append( " End Function/r/n " );
sb.Append( " End Class/r/n " );
sb.Append( " End Namespace/r/n " );
// Prepare CodeDom
VBCodeProvider cp = new VBCodeProvider();
CompilerParameters cparams = new CompilerParameters();
cparams.GenerateInMemory = true ;
CompilerResults cresults = cp.CompileAssemblyFromSource(cparams, sb.ToString());
sb = null ;
if (cresults.Errors.Count > 0 )
{
throw new Exception( " Compile error count : " + cresults.Errors.Count.ToString());
}
else
{
assy = cresults.CompiledAssembly;
execInstance = assy.CreateInstance( " RuntimeNamespace.RuntimeClass " );
Type t = execInstance.GetType();
method = t.GetMethod( " f " );
parameters = new object [ 2 ];
}
}
~ FuncXYCodeDomHelper()
{
method = null ;
parameters = null ;
execInstance = null ;
assy = null ;
}
public double func( double x, double y)
{
parameters[ 0 ] = x;
parameters[ 1 ] = y;
return ( double )method.Invoke(execInstance, parameters);
}
}
using System.CodeDom.Compiler;
using Microsoft.VisualBasic;
using System.Reflection;
using System.Text;
public class FuncXYCodeDomHelper
{
Assembly assy;
object execInstance;
MethodInfo method;
object [] parameters;
public string expression;
public FuncXYCodeDomHelper( string exp)
{
expression = exp;
// Generate VB Code
StringBuilder sb = new StringBuilder();
// sb.Append("Imports System/r/n");
sb.Append( " Imports System.Math/r/n " );
sb.Append( " Namespace RuntimeNamespace/r/n " );
sb.Append( " Class RuntimeClass/r/n " );
sb.Append( " Public Function f(ByVal x As Double, ByVal y As Double) As Double/r/n " );
sb.Append( " Return " + this .expression + "/r/n " );
sb.Append( " End Function/r/n " );
sb.Append( " End Class/r/n " );
sb.Append( " End Namespace/r/n " );
// Prepare CodeDom
VBCodeProvider cp = new VBCodeProvider();
CompilerParameters cparams = new CompilerParameters();
cparams.GenerateInMemory = true ;
CompilerResults cresults = cp.CompileAssemblyFromSource(cparams, sb.ToString());
sb = null ;
if (cresults.Errors.Count > 0 )
{
throw new Exception( " Compile error count : " + cresults.Errors.Count.ToString());
}
else
{
assy = cresults.CompiledAssembly;
execInstance = assy.CreateInstance( " RuntimeNamespace.RuntimeClass " );
Type t = execInstance.GetType();
method = t.GetMethod( " f " );
parameters = new object [ 2 ];
}
}
~ FuncXYCodeDomHelper()
{
method = null ;
parameters = null ;
execInstance = null ;
assy = null ;
}
public double func( double x, double y)
{
parameters[ 0 ] = x;
parameters[ 1 ] = y;
return ( double )method.Invoke(execInstance, parameters);
}
}