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...