首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在DynamicMethod中调用DynamicMethod

如何在DynamicMethod中调用DynamicMethod
EN

Stack Overflow用户
提问于 2019-07-27 06:25:47
回答 1查看 263关注 0票数 2

如何在创建DynamicMethod时发出IL以调用DynamicMethod?

调用ILGenerator.Emit(OpCodes.Callvirt, myDynamicMethod);时,执行时生成的IL在MissingMethodException中产生结果。

我用这个最小的代码复制了这个问题:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-27 06:35:40

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

代码语言:javascript
复制
var ilGenerator = dm2.GetILGenerator();
ilGenerator.Emit(OpCodes.Call, dm1);

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

应该使用OpCodes.Call

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57229721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档