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