2

次のコードでは、x64 用にビルドすると hRet が 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.

(OSはwin7です)。アドバイスをありがとう。

4

2 に答える 2

1

解決:

#ifndef WIN64
#include <ddraw.h>
#else
#pragma pack(push, 8)
#include <ddraw.h>
#pragma pack(pop)
#endif
于 2011-06-04T20:37:14.680 に答える