我正在尝试发出调用先前发出的动态方法的代码:
iLGenerator.Emit(OpCodes.Call, dynamicMethod.GetMethodInfo());
它通过一个异常来说明:“ MethodInfo必须是运行时MethodInfo对象”
有没有办法将动态方法转换为运行时方法?
据我所知,您已经使用将编译DynamicMethod
为CreateDelegate
。但是,如果仅将DynamicMethod
对象直接用作发射的参数,则它应该起作用。演示:
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();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句