为什么 EndScene 挂钩需要参数?

Why does an EndScene hook take an argument?

根据 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

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

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