en el código cil, ldftn se usa para obtener la dirección del puntero a la función para llamar al constructor delegado (es decir, .ctor (objeto, int nativo)).
¿Cómo obtener el puntero de función utilizado para construir delegado en C#?obtener el puntero de función 'ldftn' en C#
Respuesta
Su pregunta está formulada de una manera que hace que sea difícil entender lo que realmente está tratando de hacer. Creo que quizás lo que quiere es algo como esto:
MethodInfo mi = ...
var ptr = mi.MethodHandle.GetFunctionPointer();
// now call a delegate .ctor using that ptr
Si estás buscando cómo el código Reflection.Emit debe ser, entonces algo como esto:
il.Emit(OpCodes.Ldftn, yourMethodInfo);
il.Emit(OpCodes.Newobj, yourDelegateType.GetConstructors()[0]);
La primera línea de carga el puntero de función en la pila. La segunda línea "lo pasa" al constructor del delegado. yourDelegateType
debe ser algo así como typeof(Func<string>)
, etc.
Sí, es una forma de crear un delegado en Reflection.Emit. Pero solo quiero el puntero de función, es decir, el resultado de ldftn – Kii
@Kii, ¿qué quieres hacer con él? ¿Puede proporcionar algún (pseudo) código que ilustre lo que le gustaría lograr? –
una vez un tiempo, hay un método: create_object objeto (Object [] args) entonces quiero crear un delegado a través del método: objeto _delegate = create_object (nuevo objeto [] {null, get_ptr (method_info)}); – Kii
- 1. Puntero de función C#?
- 2. C# función de puntero en función sobrecargada
- 3. Obtener el tamaño del puntero en C
- 4. Cómo obtener el nombre de función de un puntero de función C
- 5. Llamar C++ puntero de función de C#
- 6. C puntero de función de conversión para anular puntero
- 7. C: puntero a función en línea
- 8. Puntero de retorno de la función C
- 9. Puntero de función C++ como miembro estático
- 10. Pasando el puntero struct a la función en c
- 11. Sintaxis para un puntero a una función que devuelve un puntero de función en C
- 12. Puntero de función C++ como parámetro
- 13. función de pase como puntero de función
- 14. C: declarar el puntero volátil a la función
- 15. C++ Pase el puntero a la función (Cómo) + Manipulación del puntero C++
- 16. C++ 11 lambdas para el puntero de función
- 17. ¿Cuáles son las operaciones soportadas por puntero sin formato y puntero de función en C/C++?
- 18. C++ devuelve el puntero doble de la función .... ¿qué pasa?
- 19. Función de conversión con plantilla para el puntero de función
- 20. Puntero de declaración recursiva de función en C
- 21. una pregunta acerca de la función de puntero en C
- 22. Puntero de función para __tribuir __ ((const)) función?
- 23. La función no cambia el puntero pasado C++
- 24. Pasar la función puntero a miembro como puntero a función
- 25. Puntero de función de miembro
- 26. En Objective C, ¿qué es el equivalente a pasar un puntero de función en C?
- 27. Cómo almacenar un puntero de función en C#
- 28. Puntero de función como argumento
- 29. ¿Se puede llamar a una función estática a través de un puntero de función en C?
- 30. Inicializando un puntero en una función separada en C
¿Desea la dirección del puntero sin procesar, o simplemente desea un objeto delegado en una variable? – siride
el puntero de función utilizado para llamar al .ctor (es decir, .ctor (objeto, [int nativo])) – Kii
No está muy claro de qué ctor está hablando. El valor _methodPtr solo puede ser generado por el compilador JIT. No hay nada para llamar hasta que genere el código de máquina para el método. –