为了账号安全,请及时绑定邮箱和手机立即绑定

如何在DynamicMethod中调用DynamicMethod

如何在DynamicMethod中调用DynamicMethod

C#
动漫人物 2023-07-22 16:13:21
创建 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 。


查看完整回答
反对 回复 2023-07-22
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信