![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 20.02.2009
Сообщений: 4
|
![]()
Всем доброго времени суток.
Разбирая код IL натолкнулся на следующую строку: IL_001d: newobj instance void [mscorlib]System.EventHandler::.ctor(object, native int) Нужно повторить это в динамической генерации кода. Но так как делегат нельзя создать, просто написав (OpCodes.Newobj, typeof(EventHandler).GetConstructor (Type.EmptyTypes)), то тут возникла серьезная проблема. Буду благодарен, если кто сможет разъяснить, в чем моя ошибка и как все-таки создать делегат. |
![]() |
![]() |
![]() |
#2 |
Регистрация: 20.02.2009
Сообщений: 5
|
![]()
Не очень понятно в чем проблема?
Emit(OpCodes.Newobj, typeof(EventHandler).GetConstructor (new Type[] {typeof(object), typeof(IntPtr) })) |
![]() |
![]() |
![]() |
#3 |
Регистрация: 20.02.2009
Сообщений: 4
|
![]()
NullReferenceException при таких параметрах вылетает. Перед этим вызовом на стек загружается указатель на функцию с правильной сигнатурой.
|
![]() |
![]() |
![]() |
#4 | |
Регистрация: 20.02.2009
Сообщений: 5
|
![]()
Где именно вылетает exception?
При выполнении сгенерированного кода? Тогда покажи весь emit целиком. Цитата:
Последний раз редактировалось MaTBeu; 20.02.2009 в 19:01. |
|
![]() |
![]() |
![]() |
#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'е и вылетает |
![]() |
![]() |
![]() |
#6 |
Регистрация: 20.02.2009
Сообщений: 5
|
![]()
Андрей, ну и чего ты хочешь? У типа Delegate нет такого конструктора. У него вообще нет никаких конструкторов...
|
![]() |
![]() |
![]() |
#7 |
Регистрация: 20.02.2009
Сообщений: 4
|
![]() ![]() Ну чтож, премного благодарен, теперь действительно работает ![]() |
![]() |
![]() |