Visual studio DescribePixelFormat“需要更新版本的Windows”

Visual studio DescribePixelFormat“需要更新版本的Windows”,visual-studio,winapi,directx,Visual Studio,Winapi,Directx,在将编译器从VS2010 Ultimate升级到VS2013 Professional时,我遇到了一些奇怪的行为。操作系统是Windows 7 Professional 使用GetLastError,我将问题追溯到DescribePixelFormat。。。呼叫在此之前,没有错误。紧接着,我得到了错误1150,这显然是指定的程序需要更新版本的Windows 编辑:代码如下所示: HWND window = CreateWindowEx(...); HDC device_context = Get

在将编译器从VS2010 Ultimate升级到VS2013 Professional时,我遇到了一些奇怪的行为。操作系统是Windows 7 Professional

使用GetLastError,我将问题追溯到DescribePixelFormat。。。呼叫在此之前,没有错误。紧接着,我得到了错误1150,这显然是指定的程序需要更新版本的Windows

编辑:代码如下所示:

HWND window = CreateWindowEx(...);
HDC device_context = GetDC(window);

DWORD error_before = GetLastError(); //is 0
int count = DescribePixelFormat(device_context, 1, sizeof(PIXELFORMATDESCRIPTOR), NULL);
DWORD error_after = GetLastError(); //is 1150
这个问题只发生在版本x64模式下,同样的代码在VS2010上运行良好。这可能与VS 2013认为它需要赢得8分或其他什么有关吗?这是怎么回事?

调用GetLastError的代码不正确。文件说明:

返回值

如果函数成功,返回值为最大像素格式 设备上下文的索引。此外,该函数还设置 ppfd指向的PIXELFORMATDESCRIPTOR结构的成员 根据指定的像素格式

如果函数失败,则返回值为零。获取扩展错误 信息,请调用GetLastError


换句话说,您需要检查DescribePixelFormat函数的返回值。你没有那样做。只有在DescribePixelFormat返回零的情况下,GetLastError返回的值才有任何意义。

听起来像是一个典型的错误,当您实际上没有从winapi函数获得失败返回代码时调用GetLastError。这是错误的,Windows不会在没有错误时重置错误代码。当然,没有人可以查看您的代码来确定是否是这样,强迫我们猜测是没有效果的。我对此感到困惑,因为我假设如果没有任何错误,GetLastError将返回0。阅读GetLastError的文档还可以为大多数设置线程最后一个错误代码的函数提供在失败时设置它的功能。但是,有些函数在成功时也会设置最后一个错误代码。