Hi zusammen,
meine Klasse beinhaltet eine Funktion, die mir ein beliebiges Control zurückgeben soll. Sprich wenn ich als Parameter "System.Windows.Forms.Button" übergeben, möchte ich eine Instanz dieses Controls zurück bekommen. Ich habe hier meinen bisherigen Code mal angehängt, denn in der Zeile "Assembly = CompilerResults.CompiledAssembly" bekomme ich einen Fehler. Könnt ihr mir da ggf. weiterhelfen?
Danke schonmal im voraus,
Gruß Dennis.
Imports System
Imports System.Text
Imports System.CodeDom.Compiler
Imports System.Reflection
Public Class Form1
Private Sub btn_EvalTwo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_EvalTwo.Click
Me.Controls.Add(Eval("System.Windows.Forms.Button"))
End Sub
Public Function Eval(ByVal vbCode As String) As Object
Dim Assembly As System.Reflection.Assembly
Dim CompilerResults As CompilerResults
Dim CompilerParameters As CompilerParameters = New CompilerParameters()
Dim MethodInfo As MethodInfo
Dim s As Object
Dim StringBuilder As StringBuilder = New StringBuilder("")
Dim TmpObject As Object
Dim TmpType As Type
Dim VBCodeProvider As VBCodeProvider = New VBCodeProvider
Dim ICodeCompiler As ICodeCompiler = VBCodeProvider.CreateCompiler()
CompilerParameters.ReferencedAssemblies.Add("system.dll")
CompilerParameters.ReferencedAssemblies.Add("system.xml.dll")
CompilerParameters.ReferencedAssemblies.Add("system.data.dll")
CompilerParameters.CompilerOptions = "/t:library"
CompilerParameters.GenerateInMemory = True
StringBuilder.Append("Imports System " & vbCrLf)
StringBuilder.Append("Imports System.Xml " & vbCrLf)
StringBuilder.Append("Imports System.Data " & vbCrLf)
StringBuilder.Append("Imports System.Data.SqlClient " & vbCrLf)
StringBuilder.Append("Namespace PAB " & vbCrLf)
StringBuilder.Append("Class PABLib " & vbCrLf)
StringBuilder.Append("Public Function EvalCode() As Object " & vbCrLf)
StringBuilder.Append("Dim Temp As New " & vbCode & vbCrLf)
StringBuilder.Append("Return Temp " & vbCrLf)
StringBuilder.Append("End Function " & vbCrLf)
StringBuilder.Append("End Class " & vbCrLf)
StringBuilder.Append("End Namespace " & vbCrLf)
Debug.WriteLine(StringBuilder.ToString())
CompilerResults = ICodeCompiler.CompileAssemblyFromSource(CompilerParameters, StringBuilder.ToString())
Assembly = CompilerResults.CompiledAssembly 'In dieser Zeile tritt der Fehler auf!
TmpObject = Assembly.CreateInstance("PAB.PABLib")
TmpType = TmpObject.GetType()
MethodInfo = TmpType.GetMethod("EvalCode")
s = MethodInfo.Invoke(TmpObject, Nothing)
Return s
End Function
End Class