跳转至

设备、Direct3D 和 VF 钩子的含义

如果你想知道我怎么知道 EndScene() 函数的索引是 42,你来对地方了。由于 Direct3D 9 是免费可用的库,你实际上可以看到引擎盖下发生的很多事情。库的主头文件是 d3d9.h。如果你在编辑器中打开这个文件并搜索「EndScene」,你会进入一个使用 C 宏指定多个函数的大型类定义中间。这是所有 Direct3D 9 设备实现的基类,它定义了类使用的虚函数。

VF 表按函数在代码中定义的顺序构建,所以你可以通过简单数行来确定任何成员函数的索引。你可以滚动到类定义的顶部(在我版本的库中在第 426 行,你的可能也一样),记下第一个函数声明的行(第 429 行),然后滚动到 EndScene() 定义并记下那一行(第 473 行)。最后,数一下空白或注释行的数量(对我来说是两个),做一下数学:473 – 429 – 2 = 42。

瞧!EndScene() 函数是第 43 个声明的函数,所以它位于 VF 表的第 42 个位置。拥有这个头文件的另一个好处是,你可以看到设备类中每个函数的名称、参数类型、参数名称和返回类型。所以将来编写自己的钩子时,你会确切知道去哪里找。