用Reflection.Emit调用私有构造函数?

时间:2010-12-24 22:34:25

标签: c# cil

我正在尝试发出以下IL:

LocalBuilder pointer = il.DeclareLocal(typeof(IntPtr));
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Stloc, pointer);
il.Emit(OpCodes.Ldloca, pointer);
il.Emit(OpCodes.Call, typeof(IntPtr).GetMethod("ToPointer"));
il.Emit(OpCodes.Ret);

我绑定的委托有签名

void* TestDelegate(IntPtr ptr)

抛出异常

  

行动可能破坏稳定   运行时。

任何人都知道什么是错的?

修改 好吧,所以我让IL工作了。这样做的全部目标是能够调用私有构造函数。私有构造函数采用指针,因此我无法使用普通反射。现在..当我打电话给它时,我得到一个例外

  

通过方法< built method>尝试至   访问方法<私有构造函数>   失败。

显然它正在执行安全检查 - 但根据经验,我知道Reflection能够正常地执行这样的私有事情,所以希望有一种方法可以禁用该检查吗?

1 个答案:

答案 0 :(得分:2)

通常arg-0是this指针,而不是参数列表中的IntPtr

编辑:要回答您的新问题,您需要使用其他DynamicMethod构造函数之一。例如,DynamicMethod Constructor (String, Type, Type[], Type)被描述为“与类型逻辑关联。此关联使其可以访问该类型的私有成员。”