在将编译器从VS 2010 Ultimate升级到VS 2013 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
问题只出现在Release x64模式下,并且相同的代码在VS 2010中运行良好。这可能与VS 2013有什么关系,认为它需要Win 8或其他什么?这是怎么回事?
答案 0 :(得分:0)
调用GetLastError
的代码不正确。 DescribePixelFormat
的文档说:
返回值
如果函数成功,则返回值是最大像素格式 设备上下文的索引。另外,功能设置了 ppfd指向
PIXELFORMATDESCRIPTOR
结构的成员 根据指定的像素格式。如果函数失败,则返回值为零。要获得扩展错误 信息,请致电
GetLastError
。
换句话说,您需要检查DescribePixelFormat
函数的返回值。你不是那样做的。仅在DescribePixelFormat
返回零的情况下,GetLastError
返回的值才有意义。