我正在尝试发出以下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能够正常地执行这样的私有事情,所以希望有一种方法可以禁用该检查吗?
答案 0 :(得分:2)
通常arg-0是this
指针,而不是参数列表中的IntPtr
。
编辑:要回答您的新问题,您需要使用其他DynamicMethod
构造函数之一。例如,DynamicMethod Constructor (String, Type, Type[], Type)
被描述为“与类型逻辑关联。此关联使其可以访问该类型的私有成员。”