Как правильно сделать OpCodes.Call?

Я практикую 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-летней давности).

Так может кто-нибудь, ПОЖАЛУЙСТА, быть таким добрым и научить меня, как это исправить?

Очень признателен!


person PiggyChu001    schedule 19.12.2020    source источник
comment
это потому, что метод тестирования не является статическим ... если бы он был ... очевидно, ig.Emit(OpCodes.Ldarg_0); ig.EmitCall(OpCodes.Call, mi,null); ig.Emit(OpCodes.Ret); должен делать это   -  person Selvin    schedule 19.12.2020
comment
@Селвин ВАУ! Это решило это! Кто бы мог подумать!? Или просто из-за моей неосведомленности. XD Спасибо! Не могли бы вы быть так любезны и опубликовать это как ответ, чтобы я мог отметить его как лучший ответ? Очень признателен!   -  person PiggyChu001    schedule 19.12.2020