如何在DynamicMethod中调用DynamicMethod

创建 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


动漫人物
浏览 113回答 1
1回答

陪伴而非守候

您确实可以DynamicMethod从另一个调用 a DynamicMethod。var ilGenerator = dm2.GetILGenerator(); ilGenerator.Emit(OpCodes.Call, dm1);在对象上调用虚拟方法时应使用OpCodes.CallvirtToString() (例如)。这不适用于DynamicMethod.应改用OpCodes.Call 。
打开App,查看更多内容
随时随地看视频慕课网APP