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();
}
}