2012-04-28 2 views
2

У меня есть этот код:Ошибка при попытке вызвать метод

var work = new DynamicMethod("work", null, Type.EmptyTypes); 
      var il = work.GetILGenerator(); 
      il.Emit(OpCodes.Ldstr, "a"); 
      il.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[]{typeof(string)})); 
      var d = (Action)work.CreateDelegate(typeof(Action)); 
      d(); 

Я просто пытаюсь создать новый метод с помощью System.Reflection.Emit. Но он бросает меня эта ошибка:

Common Language Runtime detected an invalid program. 

Кто-нибудь знает, как я должен исправить это работать, или где ошибка? Пожалуйста помоги.

ответ

4

Я думаю, что вам не хватает вызов, испускающий возврат:

il.Emit(OpCodes.Ldstr, "a"); 
il.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[]{typeof(string)})); 
il.Emit(OpCodes.Ret); 
+0

Да спасибо. Я думал, что в методе sub не потребуется добавлять 'ret'. У меня только один вопрос. Некоторое время, прежде чем он напечатал мне «Операция может дестабилизировать время исполнения». Зачем? – user35443

+1

@ user35443 Я не уверен, почему вы можете видеть сообщение «может дестабилизировать», но [этот пост] (http://weblogs.asp.net/mehfuzh/archive/2009/06/07/operation-could-destabilize -the-runtime-reflection-emit-and-common-pitfalls.aspx) может быть связано с проблемой, которую вы описываете. – dasblinkenlight

+0

Это не то, что я искал, но я решил эту проблему. Только один маленький вопрос: Ldarg_0 в конструкторе «этот» объект? – user35443

 Смежные вопросы

  • Нет связанных вопросов^_^