问题描述
我正在练习 this post 中的 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
。
我在网上查找异常并尝试将我的构建属性从 this post 更改为无济于事。
而且我在 this post 中找不到所谓的“高级设置”,所以我认为这篇文章已经过时了(毕竟是 5 年前的)。
那么有人可以请教我如何解决它吗?
非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)