Я пытаюсь создать следующий IL:
LocalBuilder pointer = il.DeclareLocal(typeof(IntPtr));
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Stloc, pointer);
il.Emit(OpCodes.Ldloca, pointer);
il.Emit(OpCodes.Call, typeof(IntPtr).GetMethod("ToPointer"));
il.Emit(OpCodes.Ret);
Делегат, с которым я связываюсь, имеет подпись
void* TestDelegate(IntPtr ptr)
Он выдает исключение
Операция может дестабилизировать среду выполнения.
Кто-нибудь знает, что случилось?
РЕДАКТИРОВАТЬ: Хорошо, теперь у меня работает IL. Вся цель этого заключалась в том, чтобы иметь возможность вызывать частный конструктор. Частный конструктор принимает указатель, поэтому я не могу использовать обычное отражение. Теперь .. Когда я это называю, я получаю исключение, говорящее
Попытка метода ‹построенного метода› получить доступ к методу ‹частного конструктора› не удалась.
По-видимому, он выполняет проверки безопасности, но по опыту я знаю, что Reflection обычно может делать такие приватные вещи, так что, надеюсь, есть способ отключить эту проверку?
AssemblyBuilder
); peverify расскажет вам, что не так. - person Tim Robinson   schedule 25.12.2010