简单的弹出然后重新加载不起作用



调用返回object的函数后,我尝试将值存储在堆栈上的局部变量中,然后将其推回去,但它失败了,出现异常

异常被抛出,目标是调用

代码如下:

.....
MethodInfo checked_static = typeof(NameSpace1.Class1).GetMethod(
    "Check", new Type[1] { typeof(object) });
adderIL.Emit(OpCodes.Callvirt, checked_static);
adderIL.Emit(OpCodes.Stloc_3);
adderIL.Emit(OpCodes.Ldloc_3);
adderIL.Emit(OpCodes.Brfalse, TRUE);
.....

如果我删除Stloc_3Ldloc_3一切工作正常,我在这里迷路了。

根据你对我问题的回答,看来你还没有声明你的本地。IL中的每个方法都指示它使用的所有局部变量的类型,因此需要在adderIL实例上使用DeclareLocal重载之一来声明它。如果你还没有声明任何其他局部变量,那么你还需要使用OpCodes.Stloc_0而不是OpCodes.Stloc_3(对于负载也是如此);或者,您可以使用OpCodes.StlocOpCodes.Stloc_S,并将LocalBuilder实例从DeclareLocal调用作为第二个参数传递给adderIL.Emit(在这种情况下,反射)。Emit库将为您从本地获取正确的索引)。

相关内容

  • 没有找到相关文章

最新更新