C#托管代码中的"AccessViolationException未处理"错误

use*_*443 5 c# il exception reflection.emit .net-assembly

我有新问题.我的代码:

.method public static void  Main() cil managed
{
  .entrypoint
  // Code size       3 (0x3)
  .maxstack  1
  IL_0000:  ldnull
  IL_0001:  stloc.0
  IL_0002:  ret
} // end of method Program::Main
Run Code Online (Sandbox Code Playgroud)

C#代码:

il.Emit(OpCodes.Ldnull);
il.Emit(OpCodes.Stloc_0);
il.Emit(OpCodes.Ret);
Run Code Online (Sandbox Code Playgroud)

我通过System.Reflection和System.Reflection.Emit类生成此代码.有谁知道为什么这不起作用?请帮忙.

我的错误

一个小问题 - 我应该生成构造函数吗?

And*_*tan 7

您尝试在本地0(stloc.0)中存储null,但实际上并未定义任何本地.

您需要使用该DeclareLocal方法来定义本地,那么你就可以传递给Emit一个接受LocalBuilder过载(例如,你可以用它来发出stloc操作码,其次是你的LocalBuilder); 或者你可以继续使用,stloc.0因为你知道只有一个本地人.