2014-12-04 73 views
1

一個D3D11device我如何獲得一個指向虛函數表在此:正確的指針,虛函數表

ID3D11Device *dev;   //the pointer to the device interface 

這就是我現在所擁有的,我不認爲這是正確的。

uintptr_t* pInterfaceVTable = *(uintptr_t**)dev; 

如果是這樣,那麼我如何獲得成員函數呢?再次,這就是我現在所擁有的。

uintptr_t** g_deviceFunctionAddresses = new uintptr_t*[D3D11_DEVICE_METHOD_COUNT]; 
if(dev != NULL && swapchain != NULL){ 
    for(int i=0; i<D3D11_DEVICE_METHOD_COUNT; i++){ 
     g_deviceFunctionAddresses[i] = (uintptr_t*)pInterfaceVTable[i]; 
    } 
    smplvtablefunction = pInterfaceVTable[functionoffset]; 
} 

我一直在這上面停留了一段時間。

+0

'DWORD * vt = * reinterpret_cast (dev);'每個索引是32位程序中的一個函數(4字節指針)。 – Brandon 2014-12-04 03:58:24

回答

0

vtable在標題中定義爲ID3D11DeviceVtbl。不過,你需要#include d3d11.h作爲C頭文件,否則你會用隱藏的vtable獲得類定義。

+0

一些相關問題: 1.是否有某種類型的演練? 2.是否有一個語法只會給我一個函數的地址,而不是像'd3d11dev-> checkcounter();'會調用它? – Lfod 2014-12-06 23:46:00