为什么EndScene挂钩会引用参数?

时间:2015-07-02 15:18:48

标签: c++ directx hook

根据MSDN docs,EndScene不接受任何参数。

但是我注意到当人们挂钩EndScene时,他们的钩子EndScene函数采用IDirect3DDevice9* device参数。例如:IDirect3DDevice9::EndScene hook sometimes get NULL in the parameter IDirect3DDevice9提出此问题的人对EndScene有一个IDirect3DDevice9* device参数。这是为什么?

以下是第二个例子:http://pastebin.com/raw.php?i=9HqJ3Wzz

1 个答案:

答案 0 :(得分:1)

在C ++中,成员函数的实现与常规函数类似,但是需要另外的第一个参数,它是指向对象的指针:this指针。当你挂钩一个函数时,它通常涉及使用实际函数的原始地址,因此最简单的方法(更像是唯一理智的方法)是将这个钩子函数作为标准的C风格函数来处理,并人为地添加{ {1}}指针第一个参数。

编辑:调用约定可能确实是指出的问题,但它适用于this,因为它们的方法声明为IDirect3DDevice9