VisualStudio2010 OpenGL проект падает с 0x000007b прямо при запуске - PullRequest
1 голос
/ 04 марта 2012

Я пытаюсь настроить простой VisualStudio2010 OpenGL Project

Я начинаю с нового проекта Win32 и заменяю _tWinMain следующим:

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: Place code here.
    //MSG msg;
    HACCEL hAccelTable;

    // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_GLPREDICTOR, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    HDC hdc = GetDC(hWnd);
    if (hdc == NULL)
        return FALSE;
    if(!SetPF(hdc))
        return FALSE;

    mainApp = new GLPredictor(hdc);

    HGLRC tmpContext = wglCreateContext (hdc);
    wglMakeCurrent(hdc, tmpContext);

    //create opengl 4.2 context
    /*GLenum error = glewInit();
    if(error != GLEW_OK)
        return false;
    int attributes[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 4,
                        WGL_CONTEXT_MINOR_VERSION_ARB, 2,
                        WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
                        0
                        };

    if(wglewIsSupported("WGL_ARB_create_context")==1){
        HGLRC context = wglCreateContextAttribsARB(hdc, NULL,attributes);
        wglMakeCurrent(NULL, NULL);
        wglDeleteContext(tmpContext);
        wglMakeCurrent(hdc,context);
    }
    else{
        return FALSE;
    }

    int glVersion[2] = {-1,-1};
    glGetIntegerv(GL_MAJOR_VERSION, &glVersion[0]);
    glGetIntegerv(GL_MINOR_VERSION, &glVersion[1]);
    std::cout<<"Using OpenGL: "<<glVersion[0]<<"."<<glVersion[1]<<std::endl;
    */

    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GLPREDICTOR));

    MSG msg = {0};
    while(TRUE)
    {
        // Check to see if any messages are waiting in the queue
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
            if(msg.message == WM_QUIT)
                break;
        }
        else
        {
            mainApp->render();
        }
    }

    return (int) msg.wParam;
}

Это работает.

Но как только я раскомментирую закомментированный регион (// создаем контекст opengl 4.2) и пытаюсь запустить приложение, я сразу получаю сообщение об ошибке:

The application was unable to start correctly (0x000007b). Click OK to close the application.

но незакомментированный код даже не достигнут. Я могу установить точку останова даже в первой строке _tWinMain, и она не сработает.

Я уже пытался создать новый проект и скопировать код с тем же результатом.

Кто-нибудь понял, почему этот регион приводит к сбою проекта, даже если код, который он содержит, выполняется?

// edit: ошибочная строка выглядит как

 GLenum error = glewInit();

как только он входит в код, это приводит к аварийному завершению приложения (хотя выполнение кода никогда не достигает его). Эта строка заставляет компилятор добавлять некоторые вещи, которые могут вызвать проблему?

1 Ответ

0 голосов
/ 04 марта 2012

Хорошо, я понял. Мне пришлось скопировать "glew32.dll" в мой каталог SysWOW64

...