Вы можете использовать директиву ассемблера vmtoffset
, чтобы получить байтовое смещение метода интерфейса относительно начала таблицы методов интерфейса.Взгляните на реализацию _IntfCast
в System.pas , например:
call dword ptr [eax] + vmtoffset IInterface.QueryInterface
...
call dword ptr [eax] + vmtoffset IInterface._Release
Первое выражение добавляет 0;второе, 8.
Вы не можете параметризовать эти выражения.Они являются константами времени компиляции, поэтому вы не можете выбрать, какой метод вы хотите во время выполнения.Вам необходимо заранее указать все возможные имена методов.
Все, что вам действительно нужно перехватить - это QueryInterface
.После этого вы можете вернуть любой прокси-объект, который вы хотите, который может перехватывать вызовы для всех других методов.