2010-10-12 68 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