c# - 如何正确执行 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年前的)。
那么有人可以这么好心并教我如何解决它吗?
非常感激!
解决方案
推荐阅读
- delphi - 为什么在调整 Delphi FMX 应用程序大小时 FormFactor.Width 和 FormFactor.Height 不会改变?
- c - 在选择结构中使用 rand() 的正确方法
- javascript - getStaticProps 中的 Next.js firebase 导致开发模式出现问题
- reactjs - React 和 Vercel:错误:命令“npm run build”以 1 退出?
- python - 如何比较 JSON 响应中的每个值并根据 python 中的某些条件过滤它们?
- javascript - Javascript:如何为 JSON 数组创建可传输对象
- rust - 如何将终端存储在结构中的 tui-rs 中?
- java - java中的冒泡排序问题
- marklogic-10 - Marklogic 连接到任何应用程序
- closedxml - 使用 ClosedXML 在行为空时隐藏 DataColumn