Voila, je developpe actuellement sur dev-c++, et l'utilisation de ces deux fonctions me renvoie une erreur de linkage. Je voudrais donc savoir ce qui peut manquer à mon programme ou à mon projet pour qu'il fonctionne correctement.
P.S. : il s'agit d'un tutorial sur l'opengl.
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
HINSTANCE HInst;
HDC DC;
HGLRC RC;
/* Fonction qui associe le RC au DC*/
void SetupPixelFormat(HDC hDC)
{
PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), //taille du descripteur de format
1, //version
PFD_SUPPORT_OPENGL |
PFD_DRAW_TO_WINDOW |
PFD_DOUBLEBUFFER, //Propriété
PFD_TYPE_RGBA, //Mode de couleurs
16, //Bits de couleur
0, 0, 0, 0, 0, 0, //Paramètres des couleurs
0,0, //Paramètres alpha
0,0, 0, 0, 0, //Paramètres du buffer d'accumulation
32, //Bits de profondeur
0, //Bits du buffer stencil
0, //Nombre de buffers auxiliaires
0, //ignoré (obsolète)
0, //réservé/code>
0, //ignoré (obsolète)
0, //Couleur de transparence
0 //Ignoré (obsolète)
};
int pixelFormat;
pixelFormat = ChoosePixelFormat(hDC, &pfd);
if (!pixelFormat)
{
MessageBox
(
WindowFromDC(hDC),
"Mode graphique non supporté",
"Problème",
MB_ICONERROR | MB_OK
);
exit(1);
/*Vérifie si un PixelFormat du type demandé existe*/
}
if (!SetPixelFormat(hDC, pixelFormat, &pfd))
{
MessageBox
(
WindowFromDC(hDC),
"Mode graphique non supporté",
"Problème",
MB_ICONERROR | MB_OK
);
exit(1);
/*Applique le PixelFormat. Arrête si erreur*/
}
}
/* Definition de la fonction WinProc qui sert au transit des messages*/
LRESULT CALLBACK WinProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam )
{
switch(uMsg)
{
case WM_CLOSE:
wglMakeCurrent(NULL, NULL);
if (RC) wglDeleteContext(RC);
ReleaseDC(hwnd,DC);
PostQuitMessage(0);
break;
//Libère RC et DC et ferme le programme
case WM_CREATE:
DC=GetDC(hwnd);
SetupPixelFormat(DC);
RC = wglCreateContext(DC);
if (!RC) SendMessage(hwnd,WM_CLOSE,0,0);
wglMakeCurrent(DC, RC);
break;
//Récupère le DC et le RC
default:
return DefWindowProc(hwnd,
uMsg,
wParam,
lParam);
break;
//Sinon, fait le truc habituel
}
return 0;
}
//Fonction main en Windows : WinMain
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
/* Recup des infos venant de l'appelant*/
HInst = hInstance;
/* Definition de la classe fenêtre*/
WNDCLASS WindowClass =
{ 0, //Style
WinProc, //Procédure pour la gestion des messages
0, //octets supplémentaires à allouer à la classe
0, //octets supplémentaires à allouer à la fenêtre
HInst, //Handle du programme
0, //Icne
0, //Curseur
0, //Couleur d'arrière-plan
NULL, //Pointeur sur le menu associé à la classe
"La classe!" //Nom de la classe fenêtre
};
if (!RegisterClass(&WindowClass)) exit(1);
/* Création de la première fenêtre OpenGL*/
HWND OpenGLWindow = CreateWindow
( "La classe!", //Classe de la fenêtre
"Fenêtre OpenGL", //Nom de la fenêtre
WS_VISIBLE | WS_BORDER, //Caractéristiques
0, //Position x
0, //Position y
640, //Largeur
480, //Hauteur
0, //Handle de la fenêtre même
0, //Identifiant de la fenêtre fille
HInst, //HINSTANCE du programme
NULL /*Chaine de caractères envoyée
en paramètre lors de la création
de la fenêtre*/
);
if (!OpenGLWindow) exit(1);
/*Recup des messages venant de l'extèrieur et dispatching vers les differents processus !*/
MSG msg;
do
{
while (PeekMessage(&msg,OpenGLWindow,0,0,PM_NOREMOVE))
{
if(!GetMessage(&msg,OpenGLWindow,0,0)) exit(0); // Le message WM_QUIT qui doit faire quitter le prog fait renvoyer 0 par GetMessage
DispatchMessage(&msg);
}
}
while(1);
/* LOL : Pour la forme*/
return 0; //(pour la forme)
}
Sachant que les deux fichiers que j'ai inclus dans le projet sont :
libopengl32.a et libglu32.a
Merci d'avance !