根据MSDN docs , EndScene 不带任何参数。
但我注意到当人们挂接 EndScene 时,他们挂接的 EndScene 函数采用一个 IDirect3DDevice9* device
参数。例如:IDirect3DDevice9::EndScene hook sometimes get NULL in the parameter IDirect3DDevice9问这个问题的人有一个 EndScene 的 IDirect3DDevice9* device
参数。这是为什么?
最佳答案
在 C++ 中,成员函数的实现方式与常规函数类似,但需要一个额外的第一个参数,即指向对象的指针:this
指针。当你 Hook 一个函数时,它通常涉及使用实际函数的原始地址,因此最简单的方法(更像是,唯一明智的方法)是将这个 Hook 函数作为标准 C 风格函数处理,并人为添加 this
指针第一个参数。
编辑:调用约定可能确实是所指出的问题,但它适用于 IDirect3DDevice9
和类似的,因为它们的方法声明为 __stdcall
.
关于c++ - 为什么 EndScene Hook 需要参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31188552/