我在visual studio 2008的MFC应用程序中使用opengl。 我的项目在wglmakecurrent说:
访问违规阅读位置
这仅在某种情况下发生,因此这可能不是驱动程序问题。而且我还检查了发生同样错误的另一台机器。
错误发生在以下函数中的wglMakeCurrent(m_hDC,m_hRC):
void CCETIGLView :: Convert2D(CPoint win,GLdouble * objx, GLdouble * objy,GLdouble * objz) { if((m_hDC)&&(m_hRC)) {
wglMakeCurrent(m_hDC,m_hRC); }
参数有以下几种类型:
HGLRC m_hRC;
HDC m_hDC;
从一个glview类中获取它,这是一个cview的子类。
当我检查wglMakeCurrent函数时,它为GetLastError()返回0。 当渲染某个选项并且其他选项正常工作时会发生这种情况。
我使用单线程,因此多线程问题也不计算在内。
答案 0 :(得分:0)
此测试
if((m_hDC)&&(m_hRC))
只有确保在创建类时将m_hDC和m_hRC初始化为0才有意义,这样才能确实告诉它们它们已初始化。可能你没有这样做,所以这些变量包含非零垃圾,因此被误解为用有效句柄初始化。
为构造函数添加常量初始化
CCETIGLView::CCETIGLView() :
m_hDC(0), m_hRC(0)
{
// ...