Я практикую DynamicMethod
из этого поста, и все работало нормально со следующими небольшими кодами:
private delegate long squareDel(int a);
squareDel test;
private void Form1_Load(object sender, EventArgs e)
{
DynamicMethod dm = new DynamicMethod("", typeof(long), new Type[] { typeof(int) },typeof(Form1));
ILGenerator ig = dm.GetILGenerator();
ig.Emit(OpCodes.Ldarg_0);
ig.Emit(OpCodes.Conv_I8);
ig.Emit(OpCodes.Dup);
ig.Emit(OpCodes.Mul);
ig.Emit(OpCodes.Ret);
test = (squareDel)dm.CreateDelegate(typeof(squareDel));
` `}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(test(int.Parse(textBox1.Text)).ToString());
}
Но теперь я пытаюсь включить его в OpCodes.Call с помощью небольшого метода:
public long Test(int s)
{
return s*s;
}
и внесите в код следующие изменения:
MethodInfo mi = typeof(Form1).GetMethod("Test",new Type[] { typeof(int) });
ig.Emit(OpCodes.Ldarg_0);
ig.EmitCall(OpCodes.Call, mi,null);
ig.Emit(OpCodes.Dup);
ig.Emit(OpCodes.Mul);
ig.Emit(OpCodes.Ret);
И теперь он продолжает бросать меня System.InvalidProgramException
.
Я искал исключение в Интернете и попытался изменить свойства сборки с этот пост безрезультатно.
И я не могу найти так называемые дополнительные настройки из этот пост, поэтому я предполагаю, что этот пост устарел (все-таки это 5-летней давности).
Так может кто-нибудь, ПОЖАЛУЙСТА, быть таким добрым и научить меня, как это исправить?
Очень признателен!
ig.Emit(OpCodes.Ldarg_0); ig.EmitCall(OpCodes.Call, mi,null); ig.Emit(OpCodes.Ret);
должен делать это - person Selvin   schedule 19.12.2020