0

我在 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;

硬盘驱动器 m_hDC;

它们是从作为 cview 的子类的 glview 类获得的。

当我检查 wglMakeCurrent 函数时,它为 GetLastError() 返回 0。当呈现某个选项并且其他选项正常工作时会发生这种情况。

我使用的是单线程,因此多线程问题也不算在内。

4

1 回答 1

0

本次测试

如果((m_hDC)&&(m_hRC))

只有在创建类时确保 m_hDC 和 m_hRC 被初始化为 0 时才有意义,这样人们才能真正知道它们已被初始化。可能您没有这样做,因此这些变量包含非零垃圾,因此被误解为使用有效句柄进行初始化。

向构造函数添加常量初始化

CCETIGLView::CCETIGLView() :
    m_hDC(0), m_hRC(0)
{
    // ...
于 2012-11-05T09:10:27.113 回答