为什么EndScene钩子接受一个参数

Why does an EndScene hook take an argument?

本文关键字:一个 参数 EndScene 为什么      更新时间:2023-10-16

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

但我注意到,当人们挂接EndScene时,他们挂接的EndScene函数采用IDirect3DDevice9* device参数。例如:IDirect3DDevice9::EndScene钩子有时在参数IDirect3DDevice 9中为NULL。问这个问题的人有一个EndScene的IDirect3DDevice9* device参数。为什么会这样?

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

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

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