Ненормальное выполнение после wglCreateContext в приложении на основе MFC

У нас есть 32-разрядное приложение на основе Visual C ++ / MFC (Multi-Document Interface-MDI), которое скомпилировано с использованием Visual Studio 2005.

Мы запускаем приложение на Windows Server 2008 R2 (64-разрядная версия) с графической картой ATI (точнее, ATIES1000 версии 8.240.50.5000).

Мы используем OpenGL в определенных частях нашего программного обеспечения.

Проблема заключается в том, что программное обеспечение случайно падает после выполнения кода, связанного с инициализацией окна на основе OpenGL. После включения тяжелой трассировки в код, мы обнаружили, что выполнение программы после выполнения становится ненормальным wglCreateContext() функция; он пропускает оставшуюся часть кода для текущей функции для инициализации окна на основе OpenGL и вместо этого начинает выполнять функцию просмотра (рисования) приложения по умолчанию (например, ApplicationView::OnDraw).

После выполнения нескольких строк кода для представления по умолчанию программа генерирует исключение при попытке доступа к основной переменной-члену документа. наш фильтр необработанных исключений может перехватить исключение и создать дамп выполнения, но дамп выполнения также не предоставляет много полезной информации, кроме указания, что код исключения является 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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]