weblook$ a écrit a écrit :
euh... tu peus me rappeller vite fait le lien exact entre une dll est une librairie? C'est du genre: l'appli se sert de la lib pour invoquer les fonctions de la dll,nan???
|
oui
je ne m'y connais pas des masses là-dedans ...
tu as deux types de .lib : le premier contient du code, le second contient les méthodes d'accès aux fonctions de la dll. c'est de cette manière qu'en MFC, tu peux linker statiquement ou dynamiquement.
statiquement = le code du .lib statique que tu utilises dans ton programme est recopié dans ton .exe.
dynamiquement = le .lib sert à charger la .dll et à trouver les pointeurs vers les fonctions dont tu te sers.
dans ton cas, le .lib est dynamique : tu utilises par ex la fonction TextOut() de gdi.dll - le code généré contiendra un pointeur vide vers la fonction. lors du lancement de l'exe, la dll sera chargée et les références utilisées par ton code seront patchées par windows, qui remplacera le pointeur vide par le pointeur vers la fonction chargée de la dll.
quand tu inclus un .h, ça marche car le .lib fait sûrement partie des .libs utilisés par défaut dans chaque projet. pour tester autre chose, appelle une fonction directx : la compilation marchera nickel, et au link tu auras un 'unresolved external' car le linker ne sait pas où trouver la référence. rajoute le .lib de directx à ton projet, le linker saura où trouver la définition de la fonction et pourra générer le code.
ce qui me fait penser que tu n'as pas l'air de saisir autre chose : ce n'est pas le compilateur qui génère le .exe, c'est le linker. le compilateur compile le code (il se sert des .h pour savoir comment générer les appels aux fonctions), le linker résoud les liens (il se sert des .lib pour savoir comment appeler les fonctions).