trong mã cil, ldftn được sử dụng để lấy địa chỉ con trỏ hàm để gọi hàm tạo của đại biểu (ví dụ .ctor (object, native int)).
Cách lấy con trỏ hàm được sử dụng để xây dựng đại biểu trong C#?lấy con trỏ hàm 'ldftn' trong C#
Trả lời
Câu hỏi của bạn được hiểu theo cách khó hiểu những gì bạn đang thực sự cố gắng thực hiện. Tôi nghĩ rằng có lẽ những gì bạn muốn là một cái gì đó như thế này:
MethodInfo mi = ...
var ptr = mi.MethodHandle.GetFunctionPointer();
// now call a delegate .ctor using that ptr
Nếu bạn đang tìm kiếm các mã Reflection.Emit nên xem xét như thế nào, sau đó một cái gì đó như thế này:
il.Emit(OpCodes.Ldftn, yourMethodInfo);
il.Emit(OpCodes.Newobj, yourDelegateType.GetConstructors()[0]);
Dòng đầu tiên tải con trỏ hàm vào stack. Dòng thứ hai "chuyển" nó tới hàm tạo của delegate. yourDelegateType
phải giống như typeof(Func<string>)
, v.v.
Vâng, đó là một cách để tạo đại biểu trong Reflection.Emit. Nhưng tôi chỉ muốn con trỏ hàm tức là đầu ra của ldftn – Kii
@Kii, bạn muốn làm gì với nó? Bạn có thể cung cấp một số mã giả để minh họa những gì bạn muốn thực hiện không? –
Ngày xửa ngày xưa, có một phương pháp: đối tượng create_object (object [] args) sau đó tôi muốn tạo ra một đại biểu thông qua phương pháp: đối tượng _delegate = create_object (object mới [] {null, get_ptr (method_info)}); – Kii
- 1. Cách lấy tên hàm từ con trỏ hàm trong C#?
- 2. Con trỏ hàm trong C#
- 3. Cách lấy tên hàm của con trỏ chức năng C
- 4. Con trỏ hàm được đúc trong C++
- 5. Mảng con trỏ hàm trong C
- 6. Con trỏ hàm trong mục tiêu C
- 7. Lấy kích thước con trỏ trong C
- 8. Gọi C++ con trỏ hàm từ C#
- 9. Trả về con trỏ từ hàm C
- 10. Con trỏ hàm C++ làm tham số
- 11. P/gọi hàm lấy con trỏ đến cấu trúc
- 12. Hàm con trỏ tới hàm __attribute __ ((const))?
- 13. Chuyển con trỏ cấu trúc đến hàm trong c
- 14. Con trỏ hàm với tham số mặc định trong C++
- 15. Con trỏ hàm và gọi lại trong C
- 16. Cách lấy con trỏ tới IUnknown trong C#
- 17. Cách lấy kích thước con trỏ trong C#
- 18. Con trỏ hàm thành viên
- 19. Cú pháp cho một con trỏ tới một hàm trả về một con trỏ hàm trong C
- 20. C con trỏ hàm với C++ 11 lambdas
- 21. Con trỏ hàm C++/C trả về void *
- 22. Hàm con trỏ tới hàm thành viên
- 23. Gán con trỏ cho một hàm địa chỉ của con trỏ tới đối tượng hàm
- 24. Gọi con trỏ hàm thành viên C++: con trỏ này bị lỗi
- 25. Ý nghĩa của con trỏ trỏ tới con trỏ trong C và trong C++ là gì?
- 26. Con trỏ "này" trong hàm lồng nhau
- 27. Gọi một hàm có con trỏ không const sẽ chuyển thành hàm mẫu trên một hàm lấy con trỏ tới const
- 28. chuyển functor làm con trỏ hàm
- 29. Chuyển hàm con trỏ thành thành viên làm con trỏ tới hàm
- 30. C++ hiểu cocos2d-x sử dụng các con trỏ hàm
Bạn có muốn địa chỉ con trỏ thô, hoặc bạn chỉ muốn một đối tượng đại biểu trong một biến? – siride
con trỏ hàm được sử dụng để gọi hàm .ctor (ví dụ: .ctor (đối tượng, [native int])) – Kii
Nó không rõ ràng những gì bạn đang nói về ctor. Giá trị _methodPtr chỉ có thể được tạo bởi trình biên dịch JIT. Không có gì để gọi cho đến khi nó tạo mã máy cho phương thức. –