デリゲートを動的に作成しようとしていますが、うまくいきません:S
実装
- ソース コードをコンパイルする CodeDomProvider オブジェクトを作成します。
- コンパイルされたアセンブリ (結果) がメモリに格納されます。(私のHDDではありません)
- 結果から型を取得
- Delegate.CreateDelegate メソッドでデリゲートを作成します。
CodeDomProvider によってコンパイルされるソース コード
Imports System
Public Class CTest
Public Delegate Function HelloB() As Int32
End Class
ソースコード
Dim VBCompiler As CodeDom.Compiler.CodeDomProvider = CodeDom.Compiler.CodeDomProvider.CreateProvider("VB"),
CParam As New CodeDom.Compiler.CompilerParameters,
CResult As CodeDom.Compiler.CompilerResults
CParam.GenerateExecutable = False
CParam.GenerateInMemory = True
CParam.IncludeDebugInformation = False
CParam.ReferencedAssemblies.Add("System.dll")
CResult = VBCompiler.CompileAssemblyFromSource(CParam, TextBox1.Text)
Dim CompiledAssembly As System.Reflection.Assembly = CResult.CompiledAssembly
Dim CDelegate As Type = CompiledAssembly.GetType("CTest+HelloB")
If Not IsNothing(CDelegate ) Then
Dim miHelloB As System.Reflection.MethodInfo = CDelegate .GetMethod("Invoke")
Dim dgHelloB As [Delegate] = [Delegate].CreateDelegate(CDelegate, miHelloB)
dgHelloB.DynamicInvoke()
End If
このコードをコンパイルしてデバッグすると、この行で例外が発生しました。
Dim dgHelloB As [Delegate] = [Delegate].CreateDelegate(CDelegate, miHelloB)
例外メッセージ: ターゲット メソッドへのバインド中にエラーが発生しました。このコードを修正するにはどうすればよいですか?? 誰でも助けてください。