我正在尝试创建GL上下文,并且调用失败,返回空指针。根据MSDN,当wglCreateContext失败时,你会得到GetLastError的原因。除了GetLastError给我一个数字,这不是全部信息。
再次根据MSDN,您可以使用FormatMessage从GetLastError代码中获取描述性字符串。但是,当我尝试以下操作时,我得到一个空白字符串:
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, errorStr, 0, NULL);
我检查了MSDN文档,显然它只有一个Windows系统错误的查找表。所以这对我来说没有任何帮助。有谁知道如何以编程方式弄清楚为什么我的wglCreateContext调用失败了?
答案 0 :(得分:0)
我找到了this MSDN page和this OpenGL page,但它们只有错误代码名称列表,而不是它们的数值。
OpenGL参考中的 This page提到了具有此配置文件的函数gluErrorString
:
constGLubyte *gluErrorString(GLenum error)
您使用的库中是否可以使用此功能?这应该在名为“glu.h”的文件中定义。对于Visual Studio 6,它位于:
C:\ Program Files \ Microsoft Visual Studio \ VC98 \ Include \ GL
如果您没有该版本,则应该在:
C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Include \ gl
此文件夹还应包含“gl.h”,其中包含错误代码的定义。
编辑如果你得到一个空字符串,那可能意味着它是一个非标准的错误代码。从GetLastError()
获取值,并在“gl.h”中搜索它的十六进制表示。如果它找到了,那么define将告诉你错误是什么。
答案 1 :(得分:0)
我发现了问题。 FormatMessage工作得很好;我刚才有错误的参数。这很有效:
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, errorStr, 255, NULL);