【发布时间】:2011-04-07 14:31:58
【问题描述】:
在以下代码中,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)。感谢您的建议。
【问题讨论】:
-
这是一个自我解决的问题。这4个字节启动E_INVALIDARG,因为你运行的64位系统无法理解32位ddsd。
-
我不确定我是否理解。你建议一个解决方案吗? im 所指的 4 个额外字节是 ddsd 中的表面 ptr。
-
有趣,我没想到还有 x64 版本的 DirectDraw,但我在这里看到 -- blogs.msdn.com/b/chuckw/archive/2010/06/16/… 支持它。您可能刚刚发现了一个错误,如果您对结构的大小撒谎(即给它 32 位大小)会发生什么? @alexy13 你的回答似乎很荒谬,这意味着什么?
标签: graphics 64-bit directx windows-7-x64 directdraw