gpt4 book ai didi

c# - DynamicMethod中如何调用DynamicMethod

转载 作者:行者123 更新时间:2023-11-30 22:53:21 24 4
gpt4 key购买 nike

如何在创建 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

最佳答案

您确实可以从另一个 DynamicMethod 调用一个 DynamicMethod

var ilGenerator = dm2.GetILGenerator();
ilGenerator.Emit(OpCodes.Call, dm1);

OpCodes.Callvirt应该在对象上调用虚方法时使用(例如 ToString())。这不适用于 DynamicMethod

OpCodes.Call应该改为使用。

关于c# - DynamicMethod中如何调用DynamicMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57229721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com