variable type salida parameter example argument c# .net-4.0 cil reflection.emit dynamicmethod

salida - params type c#



Llamando al método varargs a través de DynamicMethod (1)

Si bien la excepción es excepcionalmente críptica, creo que se produce debido a algunas comprobaciones de seguridad relacionadas con el método varargs de llamada, o puede ser un error en ellos. Lo que funciona es proporcionar un tipo o módulo lógicamente asociado:

var method = new DynamicMethod("printf", typeof(void), new Type[0], typeof(Program), true);

Funciona impecablemente entonces.

Estoy tratando de llamar a la función no administrada tipo printf utilizando DynamicMethod. En tiempo de ejecución, obtengo un

BadImageFormatException: Índice no encontrado. (Excepción de HRESULT: 0x80131124)

¿Es esto una limitación del tiempo de ejecución o mi código emitido es incorrecto?

public class Program { [DllImport("msvcrt40.dll",CallingConvention = CallingConvention.Cdecl)] public static extern int printf(string format, __arglist); static void Main(string[] args) { var method = new DynamicMethod("printf", typeof(void), new Type[0], true); var il = method.GetILGenerator(); il.Emit(OpCodes.Ldstr, " %s=%d/n"); il.Emit(OpCodes.Ldstr, "a"); il.Emit(OpCodes.Ldc_I4_0); il.EmitCall(OpCodes.Call, typeof(Program).GetMethod("printf", BindingFlags.Public | BindingFlags.Static), new Type[] { typeof(string), typeof(int) }); il.Emit(OpCodes.Pop); il.Emit(OpCodes.Ret); var action = (Action)method.CreateDelegate(typeof(Action)); action.Invoke(); } }