Class成员函数地址
Class member function address
编辑 这与假设的 post 有什么关系?它们都是完全不同的错误,你们真的应该停止尝试 farm rep
所以我一直在搜索 google 和 Whosebug,但我找不到对我的案例有帮助的解决方案。
我有一个 D3D9Device 指针,我想要该设备的 EndScene 地址,我该如何处理?
DWORD aEndScene = *(DWORD*)(&d3ddev->EndScene);
将无法处理以下错误
'&': illegal operation on bound member function expression
我认为这是错误的,因为我实际上是在尝试获取 d3ddev 的地址 class
成员函数指针不是按对象,而是按类型。在您的示例中,您可以有多个 IDirect3DDevice9
实例,所有这些实例的 EndScene
成员函数都将具有相同的指针值(假设它们不是不同的具体类型 - 但这不是可能)。
您收到的特定错误是因为您试图从对象中获取指向成员函数的地址,这是无效的(例如,参见 )。
可以使用类型而不是对象指针来获取成员函数的值。然而,它非常丑陋:
// Value is stored in 'end_scene':
HRESULT (IDirect3DDevice9::* end_scene)() = &IDirect3DDevice9::EndScene;
// Call the function, with the value of 'end_scene'.
(*d3ddev.*(end_scene))();
// Print the address of the pointer-to-member function:
printf("%p\n", end_scene);
我不建议在这里这样做,因为 IDirect3DDevice9
中的大多数函数都没有相同的原型。事实上,只有 BeginScene
与 EndScene
具有相同的原型,并且很难想象调用可能是其中之一的情况,因为它们需要按特定顺序调用。您可以将此用于 get/set vertex/pixel 着色器常量的函数,因为它们具有相同的原型,但是,存储一些其他外部状态以确定调用哪个函数同样容易,而且更直接。
编辑 这与假设的 post 有什么关系?它们都是完全不同的错误,你们真的应该停止尝试 farm rep
所以我一直在搜索 google 和 Whosebug,但我找不到对我的案例有帮助的解决方案。 我有一个 D3D9Device 指针,我想要该设备的 EndScene 地址,我该如何处理?
DWORD aEndScene = *(DWORD*)(&d3ddev->EndScene);
将无法处理以下错误
'&': illegal operation on bound member function expression
我认为这是错误的,因为我实际上是在尝试获取 d3ddev 的地址 class
成员函数指针不是按对象,而是按类型。在您的示例中,您可以有多个 IDirect3DDevice9
实例,所有这些实例的 EndScene
成员函数都将具有相同的指针值(假设它们不是不同的具体类型 - 但这不是可能)。
您收到的特定错误是因为您试图从对象中获取指向成员函数的地址,这是无效的(例如,参见
可以使用类型而不是对象指针来获取成员函数的值。然而,它非常丑陋:
// Value is stored in 'end_scene':
HRESULT (IDirect3DDevice9::* end_scene)() = &IDirect3DDevice9::EndScene;
// Call the function, with the value of 'end_scene'.
(*d3ddev.*(end_scene))();
// Print the address of the pointer-to-member function:
printf("%p\n", end_scene);
我不建议在这里这样做,因为 IDirect3DDevice9
中的大多数函数都没有相同的原型。事实上,只有 BeginScene
与 EndScene
具有相同的原型,并且很难想象调用可能是其中之一的情况,因为它们需要按特定顺序调用。您可以将此用于 get/set vertex/pixel 着色器常量的函数,因为它们具有相同的原型,但是,存储一些其他外部状态以确定调用哪个函数同样容易,而且更直接。