Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008
-
8 sept. 2007 à 20:38
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 2014
-
10 sept. 2007 à 02:10
Bonjour,
cela fait quelques temps que je programme en C et je me pose une question depuis le début et je n'ai pas encore trouvé ma réponse... Je comprend l'interet des #include mais je ne comprend pas pourquoi parfois il faut lier les librairies avec #pragma comment(...), en fait j'aimerai savoir précisément ce qui se passe quand on link une librairie et pourquoi il faut le faire.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 9 sept. 2007 à 12:14
Salut,
Le fichier LIB contient une référence des fonctions d'une DLL. Elle contient les noms des fonctions exportées avec leurs points d'entrée, le nombre et types de paramètres à passer etc. Cette référence sera injectée, par l'éditeur de liens, comme table d'import dans l'exécutable à générer. L'implémentation du code se trouve elle dans la DLL associée. Par défaut sous Windows, les compilateurs ajoutent aux projets kernel32.lib, user32.lib, gdi32.lib ect. Ces dernières sont respectivements associées à kernel32.dll, user32.dll et gdi32.dll. Pour utiliser une DLL non reconnue par défaut, on doit ajouter sa LIB au projet. Sinon, on devra charger la DLL avec LoadLibrary() et récupérer les adresses des fonctions avec GetProcAddress() après avoir défini au préalable un type de pointeur pour chaque fonction à utiliser. Le type de pointeur définit la convention d'appel de la fonction, le paramètre de sortie et les paramètres d'entrée.
Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008 10 sept. 2007 à 01:56
Bonjour et merci pour vos réponses.
Je suis venu poser cette question en voyant :
#pragma comment(lib, "ws2_32.lib")
quand j'ai voulu utiliser les sockets. J'ai essayé sans cette ligne, ça ne fonctionnait pas, et comme c'est pas la première fois que j'entend parler du fait de lier les librairies j'avais envie de comprendre, maintenant quelle est la différence entre une librairie statique et un librairie lié à une DLL ?
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 10 sept. 2007 à 02:10
ws2_32.lib est associée à ws2_32.dll. Une lib statique contient l'implémentation de fonctions. Ces fonctions seront injectées, par l'éditeur de liens, dans le code de l'exécutable au lieu d'être appelées dans une dll externe.