我正在编写自己的编译器,以此为乐趣的xD。它正在使用Mono.Cecil编译成CIL,当我反编译它或查看CIL时,它看起来没有问题,然而,当我运行它时,我得到了一个崩溃(异常),声明“方法未找到:'?'”。
查看生成崩溃的方法(stacktrace显示哪个方法),这是给定方法的CIL:
.method public hidebysig virtual
instance class [Totem.Library]Totem.Library.TotemValue Execute () cil managed
{
IL_0000: callvirt class [Totem.Library]Totem.Library.TotemUndefined [Totem.Library]Totem.Library.TotemUndefined::get_Value()
IL_0005: ret
}Totem.Library是一个用C#编写的外部dll (不是用我的编译器编译的,因此应该可以工作)。被访问的属性(TotemUndefined.Value,静态属性)无法导致异常(它只返回在TotemUndefined的静态构造函数中创建的单例)。
我想知道,这个CIL有什么问题吗?或者需要更多信息来查找问题(可以上传完整的源代码,到目前为止总共只有几百行)。
发布于 2012-01-17 04:43:28
您正在使用callvirt调用静态函数。这不会起作用,只需使用call即可。
https://stackoverflow.com/questions/8885984
复制相似问题