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

时间:2012-04-03 16:49:05

标签: c# exception .net-assembly reflection.emit il

我有新问题。我的代码:

.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

C#代码:

il.Emit(OpCodes.Ldnull);
il.Emit(OpCodes.Stloc_0);
il.Emit(OpCodes.Ret);

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

My error

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

1 个答案:

答案 0 :(得分:7)

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

您需要使用DeclareLocal方法来定义本地,然后您可以将其传递给接受LocalBuilder的Emit重载(例如,您可以使用它来发出{{1}操作码,然后是你的LocalBuilder);或者你可以继续使用stloc,因为你知道只有一个本地人。