2013-12-03 1 views
2

Я пытаюсь создать свой собственный язык программирования игрушек для CIL, используя IL Reflection для генерации exes, но когда Im вызывает метод, я просто не работаю.IL Call with Method from string

Я использую System.Reflection.ILGenerator.Emit(OpCodes.Call, MethodInfo).

При получении MethodInfo из Type нечестным путем использования typeof(something), он отлично работает, вызов передается через и он работает, но когда я получаю Type с функцией Type.GetType(string), по какой-то причине он не будет генерировать IL, я проверил и обнаружил, что typeof == Type.GetType (нет разницы в результатах при проверке с помощью оператора ==).

Я огляделся, но, похоже, не нашел никакого решения, может ли кто-нибудь сказать мне, что происходит?

EDIT: here is a link to the git repo file

Код:

//Create IL Generator and standard stuff before this... 
ilGenerator.Emit(OpCodes.Ldstr, "hello world"); //Push argument(s) 
MethodInfo method = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }); 
MethodInfo rmethod = Type.GetType("System.Console").GetMethod("WriteLine", new Type[] { typeof(string) }); 
if(method == rmethod) 
{ 
    Console.WriteLine("MATCH!"); //This fires so I know they match 
} 
ilGenerator.Emit(OpCodes.Call, method); //This works 
ilGenerator.Emit(OpCodes.Call, rmethod); //This does not... (no exceptions, but no code is generated looking with ILSpy afterwards) 
+0

Опубликовать полный код динамического метода. как вы проходите аргумент и т. д. –

+0

там, не видите, что такое различие, но аргументы выдаются отлично. – Northcode

+0

Это невозможно объяснить. Кроме того, что Type.GetType() следует только вызывать с * полностью квалифицированным именем типа *. Если вы дадите частичное имя, например «System.Console», тогда могут произойти несчастные случаи. –

ответ

2

Я нашел эту проблему, в какой-то момент в моем коде перед этим была выполнена, то typebuilder.CreateType был уволен, и это stoppes в Иром ...

Спасибо за помощь!

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

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