2010-10-12 79 views
5

,ldftn用于获取调用委托构造函数(即.ctor(object,native int))的函数指针地址。
如何获取用于在C#中构造委托的函数指针?在cil代码中获得'ldftn'函数指针,在cil代码中使用ldftn'

+0

你想要的原始指针地址,或者你只是想在一个变量委托对象? – siride 2010-10-12 14:50:07

+0

用于调用.ctor的函数指针(即.ctor(object,[native int])) – Kii 2010-10-12 14:55:41

+1

这很不清楚你在说什么。 _methodPtr值只能由JIT编译器生成。在为该方法生成机器码之前没有任何要调用的东西。 – 2010-10-12 15:39:51

回答

5

您的问题的表述方式很难理解您实际尝试做什么。我认为,也许你想要的是这样的:

MethodInfo mi = ... 
var ptr = mi.MethodHandle.GetFunctionPointer(); 
// now call a delegate .ctor using that ptr 
3

如果你正在寻找的Reflection.Emit的代码应该是什么样子,然后是这样的:

il.Emit(OpCodes.Ldftn, yourMethodInfo); 
il.Emit(OpCodes.Newobj, yourDelegateType.GetConstructors()[0]); 

第一行加载函数指针到堆栈。第二行“传递”给委托的构造函数。 yourDelegateType应该是类似于typeof(Func<string>)等。

+0

是的,这是一种在Reflection.Emit中创建委托的方法。但是我只想要函数指针,即ldftn – Kii 2010-10-12 15:00:06

+1

@Kii的输出,你想用它做什么?你能提供一些(伪)代码来说明你想完成什么吗? – 2010-10-12 15:03:20

+0

从前时间,存在一种方法: 对象create_object(对象[]参数) 然后我想通过该方法来创建委托: 对象_delegate = create_object(新的对象[] {NULL,get_ptr(method_info )}); – Kii 2010-10-12 15:14:06