В следующем коде hRet устанавливается в E_INVALIDARG при сборке для x64.
Один и тот же код всегда работает нормально в 32 битах. Единственная четкая разница во входных данных - это размер ddsd, который на 4 байта больше в 64-битном режиме из-за размера указателя.
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). Спасибо за любой совет.