Imports System.Text.RegularExpressions
Imports System.Reflection
Module Module1
Class Expression
Private Shared methodRegex As Regex = New
Regex("^(?<Method>\w[\w\d_]+)\s*(\((?<Parameters>.*)\))?$",
RegexOptions.Compiled Or RegexOptions.Singleline)
Public Shared Function Run(ByVal obj As Object, ByVal expr As
String) As Object
Dim m As Match = methodRegex.Match(expr)
Dim method As String = m.Groups("Method").Value
Dim parameters As String = m.Groups("Parameters").Value
Dim params As Object() = Nothing
Dim binding As BindingFlags = BindingFlags.InvokeMethod Or
BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.Public Or
BindingFlags.NonPublic
Dim mi As MethodInfo = obj.GetType().GetMethod(method, binding)
If mi Is Nothing Then
Return Nothing
End If
If Not String.IsNullOrEmpty(parameters) Then
Dim stringParams As String() = parameters.Split(New String()
{","}, StringSplitOptions.RemoveEmptyEntries)
ReDim params(stringParams.Length - 1)
Dim parameterInfo As ParameterInfo() = mi.GetParameters()
If params.Length <parameterInfo.Length Then
Return Nothing
End If
For Each pi As ParameterInfo In parameterInfo
params(pi.Position) =
Convert.ChangeType(stringParams(pi.Position), pi.ParameterType)
Next
End If
Return mi.Invoke(obj, binding, Nothing, params,
Threading.Thread.CurrentThread.CurrentCulture)
End Function
End Class
Sub Main()
Dim expr As String = "test2(10,25)"
Expression.Run(New TestClass, expr)
End Sub
Class TestClass
Public Function test2(ByVal i As Integer, ByVal x As Integer) As
Integer
Dim y As Integer
y = i + x
Return y
End Function
End Class
End Module
"Jan Heppen" wrote:
Hi,
I've a question. I'm developing a windows application and for the
application i need to run functions and procedures that are stored in a
database.
Here is an example that i tried to get working.
How can i execute the function that is stored in the string expr ?
-
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
-
System.EventArgs) Handles Button1.Click
-
Dim expr As String = "test2(10,25)"
-
MessageBox.Show(expr)
-
expr.run()
-
End Sub
-
Function test2(ByVal i As Integer, ByVal x As Integer) As Boolean
-
Dim y As Integer
-
y = i + x
-
Return y
-
End Function
-