在以下代码中,hRet 在为 x64 构建时设置为 E_INVALIDARG。
相同的代码在 32 位中始终可以正常工作。输入中唯一明显的区别是 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)。感谢您的任何建议。