Виртуальные функции подключения / обхода - PullRequest
1 голос
/ 11 сентября 2011

Я пытался правильно подключить / обойти виртуальную функцию в объекте класса, и я добился успеха с точки зрения вызова другой функции, но я должен делать что-то неправильное с точки зрения того, как this Ключевое слово передается в функцию.

Я читал статью о подключении функций D3D подобным образом, и там упоминалось, что компилятор превратит функцию, такую ​​как int Class::method(int), в int method(Class* this, int), но если я заменю адрес в виртуальной таблице функцией, которая определенный как таковой, адрес для этого является неправильным, так что это, вероятно, неправильно.

Как функции-члены размечены компилятором, и возможно ли представить его в форме, не являющейся членом-функции, чтобы я мог установить адрес в vtable для такой функции и иметь возможность ссылаться на соответствующий объект

1 Ответ

1 голос
/ 11 сентября 2011

Вам нужно определить свою функцию как thiscall .Он передает this в регистр ecx.Как вы и сделали, функция ожидала this в стеке и считала неправильное значение, которое, вероятно, принадлежало другому аргументу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...