I have an application that opens many windows. Sometimes, I get wglCreateContext() returns 0 and GetLastError() returns 0xc007001f.
It happens on Intel graphic cards only.
Did someone see it? Someone knows what it is?
您可以将错误代码分解为其部分。0xC 使其成为致命错误,007 产生设施代码 7,即 winapi。这使得最后四位数字 Windows 错误 31:
//
// MessageId: ERROR_GEN_FAILURE
//
// MessageText:
//
// A device attached to the system is not functioning.
//
#define ERROR_GEN_FAILURE 31L
假设您将正确的设备上下文句柄传递给 wglCreateContext(),这使它成为一个非常基本的设备驱动程序问题。通常需要更新视频驱动程序并确保安装正确类型的 OpenGL 驱动程序。当然,您无法解决任何问题,这是用户需要解决的问题。
我相信错误 0xc007001f 是SetPixelFormat()
失败的时候。这意味着,您正在尝试使用该卡不支持的像素格式的某些功能。如果我没记错的话,英特尔显卡几乎不支持 OpenGL(仅 [编辑:2.1])。
您还可以使用 FormatMessage 获取错误描述的字符串:
DWORD err = GetLastError();
char* msg;
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER, 0, err, 0, (LPCSTR)&msg, 0, 0);
MessageBoxA(0, msg, "Error", 0);
LocalFree(msg);