基于MFC的应用程序中wglCreateContext之后的异常执行

时间:2014-01-30 17:29:01

标签: c++ windows opengl mfc crash-dumps

我们有一个基于32位Visual C ++ / MFC(多文档界面-MDI)的应用程序,它是使用Visual Studio 2005编译的。

我们正在Windows Server 2008 R2(64位)上运行具有ATI显卡的应用程序(确切地说是ATIES1000版本8.240.50.5000)。

我们在软件的某些部分使用OpenGL。

问题是在执行与基于OpenGL的窗口初始化相关的代码后,软件会随机崩溃。在代码中包含大量跟踪后,我们发现执行wglCreateContext() function后程序执行异常;它跳过当前函数的其余代码,用于初始化基于OpenGL的Window,而是开始执行应用程序的默认View(绘图)功能(例如ApplicationView::OnDraw)。

在为默认视图执行几行代码之后,程序在尝试访问主文档成员变量时会生成异常。我们的unhandled exception filter能够捕获异常并生成执行转储,但执行转储除了指定异常代码为c0000090之外,也没有提供太多有用的信息。

问题非常随机,仅报告仅出现在此Windows服务器环境中。

解决这种情况的任何帮助或提示?

编辑: 换句话说,程序结构看起来像这样,执行在wglCreateContext()函数之后随机跳过行,执行几行ApplicationView::onDraw然后导致异常:

void 3DView::InitializeOpenGL()
{
    ....
    Init3DWindow( m_b3DEnabled, m_pDC->GetSafeHdc());
    m_Font->init();
    ....
}


bool 3DView::Init3DWindow( bool b3DEnabled, HDC pHDC)
{
    ...
    static PIXELFORMATDESCRIPTOR pd = {
        sizeof (PIXELFORMATDESCRIPTOR), // Specifies the size
        1,               // Specifies the version of this data structure
            ...
    };
    int iPixelFormat = ChoosePixelFormat(pHDC, &pd);
    if(iPixelFormat == 0) 
    {
        ...
    }
    bSuccess = SetPixelFormat(pHDC, iPixelFormat, &pd);
    m_hRC = wglCreateContext(pHDC);
    //Execution becomes abnormal afterwards and control exits from 3DView::Init3DWindow
    if(m_hRC==NULL)
    {
        ...
    }
    bSuccess = wglMakeCurrent(pHDC, m_hRC);
        ....
    return true;
}

void ApplicationView::OnDraw(CDC* pDC)
{
    ...
    CApplicationDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    ...
    double currentValue = pDoc->m_CurrentValue;
    //EXCEPTION raised at the above line
    double nextValue = pDoc->nextValue;
}

0 个答案:

没有答案