@Goldywhite

Как вызвать виртуальный метод в C# из IL?

Добрый день.


Исходные данные: имеется MethodInfo виртуального метода, например полученный с интерфейса

Задача: необходимо собрать функцию которая осуществляет вызов виртуальных методов с такой же сигнатурой с помощью инструкции calli


Собственно вопрос: каким образом можно заменить инструкцию ldvirtftn в IL, либо как получить указатель на метод, который реализует поиск виртуальной функции и осуществит вызов?


Например в случае если метод невиртуальный и адрес метода, например, передан первым аргументом:
ldftn calli <br/>
можно заменить на<br/>
<code>ldarg.0<br/>
conv.i<br/>
calli <br/>
В данном случае адрес метода получается следующим образом: <br/>
<code>MethodInfo m;<br/>
var ptr = m.MethodHandle.GetFunctionPointer()</code></code>
  • Вопрос задан
  • 2796 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы