在以下代碼中,爲x64構建時,hRet被設置爲E_INVALIDARG。DirectDraw中的CreateSurface返回x64上的E_INVALIDARG
相同的代碼在32位中總能正常工作。輸入中唯一明顯的區別是sizeof ddsd,由於指針大小的原因,它在64位模式下增加了4個字節。
HRESULT hRet;
DDSURFACEDESC2 ddsd;
LPDIRECTDRAWSURFACE4 pTempDDrawSurface = NULL;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps |= DDSCAPS_PRIMARYSURFACE;
// Create primary surface
hRet = m_pRootDDrawObj->CreateSurface(&ddsd, &pTempDDrawSurface, NULL);
if (hRet != DD_OK)
return -3; //gets here with E_INVALIDARG, but GetLastError() is 0.
(操作系統是win7)。感謝您的任何建議。
這是一個自我解決的問題。這4個字節會啓動E_INVALIDARG,因爲您正在運行的64位系統無法理解32位ddsd。 – alexy13 2011-04-07 20:07:59
我不知道我明白。你建議一個解決方案?我提到的4個額外字節是ddsd中的一個表面ptr。 – glutz 2011-04-07 22:17:46
有趣的是,我不會想到甚至有一個DirectDraw的x64版本,但我在這裏看到 - http://blogs.msdn.com/b/chuckw/archive/2010/06/16/wither-directdraw。 aspx支持。你可能剛剛發現了一個bug,如果你對它的結構大小(即給它的32位大小)說謊會發生什麼?而@ alexy13你的回答看起來毫無意義,這甚至意味着什麼? – eodabash 2011-04-11 21:34:52