|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.02.2009, 13:37 | #1 |
Регистрация: 20.02.2009
Сообщений: 4
|
Делегаты в MSIL
Всем доброго времени суток.
Разбирая код IL натолкнулся на следующую строку: IL_001d: newobj instance void [mscorlib]System.EventHandler::.ctor(object, native int) Нужно повторить это в динамической генерации кода. Но так как делегат нельзя создать, просто написав (OpCodes.Newobj, typeof(EventHandler).GetConstructor (Type.EmptyTypes)), то тут возникла серьезная проблема. Буду благодарен, если кто сможет разъяснить, в чем моя ошибка и как все-таки создать делегат. |
20.02.2009, 16:48 | #2 |
Регистрация: 20.02.2009
Сообщений: 5
|
Не очень понятно в чем проблема?
Emit(OpCodes.Newobj, typeof(EventHandler).GetConstructor (new Type[] {typeof(object), typeof(IntPtr) })) |
20.02.2009, 18:38 | #3 |
Регистрация: 20.02.2009
Сообщений: 4
|
NullReferenceException при таких параметрах вылетает. Перед этим вызовом на стек загружается указатель на функцию с правильной сигнатурой.
|
20.02.2009, 18:49 | #4 | |
Регистрация: 20.02.2009
Сообщений: 5
|
Где именно вылетает exception?
При выполнении сгенерированного кода? Тогда покажи весь emit целиком. Цитата:
Последний раз редактировалось MaTBeu; 20.02.2009 в 19:01. |
|
20.02.2009, 19:02 | #5 |
Регистрация: 20.02.2009
Сообщений: 4
|
Весь Emit целиком?
Вот небольшая часть: dynMenuConstructorGetIL.Emit(OpCode s.Ldarg_0); foreach (MethodBuilder m in methodsStorage) { if ("call_" + ((MethodInfo)root.Tag).Name.ToStrin g() == m.Name.ToString()) { dynMenuConstructorGetIL.Emit(OpCode s.Ldftn, m); break; } } dynMenuConstructorGetIL.Emit(OpCode s.Newobj, typeof(Delegate).GetConstructor(new Type[] {typeof(object), typeof(IntPtr)})); Вот на последнем Emit'е и вылетает |
20.02.2009, 19:04 | #6 |
Регистрация: 20.02.2009
Сообщений: 5
|
Андрей, ну и чего ты хочешь? У типа Delegate нет такого конструктора. У него вообще нет никаких конструкторов...
|
20.02.2009, 19:17 | #7 |
Регистрация: 20.02.2009
Сообщений: 4
|
действительно, что сказать.... Не заметил, что сам указал Delegate вместо EventHandler.
Ну чтож, премного благодарен, теперь действительно работает |