c++ - 为什么 EndScene Hook 需要参数?

标签 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

最佳答案

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

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

关于c++ - 为什么 EndScene Hook 需要参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31188552/

相关文章:

git - 如何指定在 git 中使用哪个 SSH key 进行 git push 以便将 gitorious 作为镜像?

c++ - 是否可以在 C++ 中创建可重新定义的命名空间别名?

c++ - DirectX - 每次调用 D3DXCreateTextureFromFile() 的新设备引用?

ios - 连接到 iOS MobileSms 应用程序

c++ - 获取着色器字节码以传递给 CreateVertexShader()

c++ - HLSL 和 DX Skybox 问题(产生接缝)

C# Opengl Hook Swapbuffer 添加插值帧

C++ 工厂和类型转换问题

c++ - qmake:如何链接库两次?

C++ for each,隐藏类型转换