3

以前に発行した動的メソッドを呼び出すコードを発行しようとしています。

iLGenerator.Emit(OpCodes.Call, dynamicMethod.GetMethodInfo());

「MethodInfo は実行時の MethodInfo オブジェクトでなければなりません」という例外が発生します。

動的メソッドをランタイムメソッドに変換する方法はありますか?

4

1 に答える 1

5

私が言えることから、DynamicMethodを使用してデリゲートに既にコンパイルしていますCreateDelegate。ただし、DynamicMethodEmit のパラメータとしてオブジェクトを直接使用するだけであれば、動作するはずです。デモンストレーション:

using System.Reflection;
using System.Reflection.Emit;

public class Program
{
    public static void Main(string[] args)
    {
        var dynMethod = new DynamicMethod("test1", typeof(void), Type.EmptyTypes);
        var gen = dynMethod.GetILGenerator();
        gen.EmitWriteLine("Test");
        gen.Emit(OpCodes.Ret);

        var dynMethod2 = new DynamicMethod("test2", typeof(void), Type.EmptyTypes);
        gen = dynMethod2.GetILGenerator();
        gen.Emit(OpCodes.Call, dynMethod);
        gen.Emit(OpCodes.Ret);
        var method2 = (Action)dynMethod2.CreateDelegate(typeof(Action));
        method2();
    }
}
于 2014-06-18T03:13:22.230 に答える