创建 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
1 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
您确实可以DynamicMethod
从另一个调用 a DynamicMethod
。
var ilGenerator = dm2.GetILGenerator(); ilGenerator.Emit(OpCodes.Call, dm1);
在对象上调用虚拟方法时应使用OpCodes.CallvirtToString()
(例如)。这不适用于DynamicMethod
.
应改用OpCodes.Call 。
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报
0/150
提交
取消