@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>
  • Вопрос задан
  • 2798 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

Похожие вопросы
27 нояб. 2024, в 17:41
2000 руб./за проект
27 нояб. 2024, в 17:26
1 руб./за проект
27 нояб. 2024, в 17:17
3000 руб./за проект