我正在编写自己的编译器以获得它的乐趣xD。它正在使用Mono.Cecil编译到CIL,当我反编译或查看CIL它看起来没问题,但是,当我运行它时,我遇到崩溃(异常),声明“找不到方法:'?'”。 / p>
查看生成崩溃的方法(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有什么问题吗?或者是找到问题所需的更多信息(可以上传完整的源代码,截至目前只有几百行)。
答案 0 :(得分:2)
您正在使用callvirt
来调用静态函数。这不会奏效,只需使用call
。