Avatar billede Slettet bruger
22. juni 2005 - 12:02 Der er 3 kommentarer og
1 løsning

Link-fejl (OpenGL), hvorfor?

Hej eksperter.

Jeg har kastet min kærlighed på OpenGL - men har problemer under programafviklingen.

Ved afviklingen gives en fejl "LNK2001: unresolved external symbol "long __stdcall WndProc...." og en søgning i hjælpen afslører, at der er et eller andet, den ikke kan linke til.

Jeg bruger Visual Studio C++ version 6. Herunder er "Object/Libraries-feltet" under Project->Settings->Link yderligere forsynet med opengl32.lib glu32.lib glut32.lib i slutningen. Og filerne er kopieret ind i de respektive mapper, inkl. opengl32.dll i windows-systemfolderen.

Koden er beskåret lidt, men burde vel kunne kompileres nu, alligevel?


// BasicOpenGL.cpp : Dette er mit første, selvstændige OpenGL program. Forsøges udviklet vha. OOP, der er min næste, forståelsesmæssige udfordring
//

#include <windows.h>
#include <gl/gl.h>
#pragma comment(lib, "OpenGL32.lib")

//Her definerer vi vores Windows-procedure
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);


//Her definerer vi vores funktion til at tilgængeliggøre OpenGL.
void EnableOpenGL(HWND hWnd, HDC *hDC, HGLRC *hRC);


//Her definerer vi vores funktion til at deallokere OpenGL fra RAM'en
//dvs. at vi ryder op efter os med denne funktion
void DisableOpenGL(HWND hWnd, HDC hDC, HGLRC hRC);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASS    wc;                // OPRETTER VORES KLASSE - Spørg Brian
    HWND        hWnd;            // Variabel til at håndtere vores vinduer - OpenGL formalia ligesom resten
    HDC            hDC;            // Bruges til at håndteres vores device Context - find ud af, hvad dette betyder
    HGLRC        hRC;            // Håndterer Render Context - uddyb
    MSG            msg;            // Windows messages - Nedlukning af vinduer m.m.
    BOOL        bQuit = FALSE;    // Programmet skal i udgangspunktet ikke lukkes

    // Følgende kode omfatter visning af vinduet - ikoner, cursor m.m.
    // Slå evt. værdierne op et sted...
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon (0, IDI_APPLICATION);
    wc.hCursor = LoadCursor (0, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH); // Sæt baggrundsfarven til sort
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "MitFoersteOpenGL"; // Vores klassenavn
    RegisterClass(&wc); // Hvad gør RegisterClass? Find ud af dette


    return 0;
}

En løbende udkommentering af de enkelte linier afslører, at det er linien "wc.lpfnWndProc = WndProc;" der giver problemer. Men skulle ikke undres, om det blot er en lille, men ikke ubetydelig snot-fejl...
Avatar billede arne_v Ekspert
22. juni 2005 - 12:09 #1
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

erklærer WndProc

den implementerer den ikke
Avatar billede jpk Nybegynder
22. juni 2005 - 12:11 #2
En lille misforståelse? Det er under linkning (ikke programafvikling) du får fejlen, ikke?

I den kode du viser her, har du ikke implementeret WndProc. Hvis du ikke har det, er der ikke noget at sige til at linkeren ikke kan finde den...
Avatar billede Slettet bruger
22. juni 2005 - 12:20 #3
Ahahaaaahaa... Selvfølgelig, hvor er jeg lam. Tak til jer - begge besvarelser ledte til de vises sten. Men Arne, hvis du lige besvarer, får du point.
Avatar billede arne_v Ekspert
22. juni 2005 - 12:21 #4
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester