2009-12-09 79 views
1

我的代碼的IDirectDraw :: GetCaps返回DDERR_INVALIDPARAMS(又名E_INVALIDARG,又名80070057)這個小片段。什麼可能會導致IDirectDraw :: GetCaps返回DDERR_INVALIDPARAMS?

的加載DLL是ddraw.dll 5.03.2600.5512(xpsp.080413-0845)

我需要檢查顯示硬件是否具有三維加速度(DDCAPS_3D)。

我也沒辦法解決的問題,該片段是如此簡單,我失去的東西嗎?

非常感謝。

亞歷山德羅

#include <ddraw.h> 
#include <iostream> 

#define TEST_HR(hr) if(hr!=DD_OK){ std::cout << "Error 0x" << std::hex << static_cast<unsigned long>(hr) << " at line: " << std::dec << __LINE__; return __LINE__;} 

int main(int argc, char* argv[]) 
{ 
    ::CoInitialize(0); 
    IDirectDraw* dd; 
    TEST_HR(::DirectDrawCreate(0, &dd, 0)); 
    DDCAPS hel_caps, hw_caps; 
    ::ZeroMemory(&hel_caps, sizeof(DDCAPS)); 
    ::ZeroMemory(&hw_caps, sizeof(DDCAPS)); 
    TEST_HR(dd->GetCaps(&hw_caps, &hel_caps)); 
    ::CoUninitialize(); 
    return 0; 
} 

回答

4

與大多數的DirectX結構,你需要將它傳遞到DirectX之前設置DDCAPS結構的大小。

::ZeroMemory(&hel_caps, sizeof(DDCAPS)); 
::ZeroMemory(&hw_caps, sizeof(DDCAPS)); 
hel_caps.dwSize = sizeof(DDCAPS); 
hw_caps.dwSize = sizeof(DDCAPS); 
+0

非常感謝您! – 2009-12-10 10:14:38

相關問題