如何在创建DynamicMethod时发出IL以调用DynamicMethod?
调用ILGenerator.Emit(OpCodes.Callvirt, myDynamicMethod);时,执行时生成的IL在MissingMethodException中产生结果。
我用这个最小的代码复制了这个问题:
var dm1 = new DynamicMethod("Dm1", typeof(void), new Type[0]);
dm1.GetILGenerator().Emit(OpCodes.Ret);
var dm2 = new DynamicMethod("Dm2", typeof(void), new Type[0]);
var ilGenerator = dm2.GetILGenerator();
ilGenerator.Emit(OpCodes.Callvirt, dm1);
ilGenerator.Emit(OpCodes.Ret);
dm2.Invoke(null, new Type[0]); // exception raised here发布于 2019-07-27 06:35:40
您确实可以从另一个DynamicMethod调用一个DynamicMethod。
var ilGenerator = dm2.GetILGenerator();
ilGenerator.Emit(OpCodes.Call, dm1);在调用对象上的虚拟方法(例如,OpCodes.Callvirt )时,应该使用ToString()。这不适用于DynamicMethod。
应该使用OpCodes.Call。
https://stackoverflow.com/questions/57229721
复制相似问题