一个简单的Pop然后加载不起作用

时间:2011-08-08 09:55:44

标签: .net il ilgenerator

在调用一个返回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一切正常,我就迷失在这里。

1 个答案:

答案 0 :(得分:1)

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