IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Pourquoi inclure des .lib pour utiliser des DLLs système?


Sujet :

Windows

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut Pourquoi inclure des .lib pour utiliser des DLLs système?
    Bonjour à tous,
    Corrigez-moi si je me trompe...

    Il existe deux types de librairies :
    les librairies statiques, incorporées à l'executable et permettant ainsi de tout grouper dans un seul fichier, au détriment de la taille et de la mise à jour ;
    et les librairies dynamiques, chargées en mémoire à l'execution du programme.

    Je me doute qu'il y a moyen d'être plus précis que cela mais en gros je suppose que mon idée est bonne...

    Maintenant je me demandais pourquoi, lors de l'utilisation des APIs Windows, il fallait également utiliser une libraire statique (.lib) alors que ces APIs se trouvent dans des DLLs?
    Faut-il également le faire lorsque l'on crée sa propre DLL? Je n'en ai pas souvenir...

    Merci d'avance,
    Nicolas jolet

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    On appelle cela une Bibliothèque statique d'importation.

    Cela permet d'utiliser une DLL sans avoir à y aller à coups de LoadLibrary()+GetProcAddress().

    Pour utiliser des classes C++ (comme dans une DLL d'extension MFC) c'est (pratiquement ?) indispensable.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    Donc, très logiquement, même si je crée et utilise ma propre DLL, je devrais lier un .lib également?!

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sauf si toutes ses fonctions ont une interface C et que tu l'utilises avec LoadLibrary()+GetProcAddress().

    Les DLLs dites "Composants COM" ne nécessitent pas de bibliothèques statique d'importation non plus, car elles utilisent une combinaison gagnante pour cela (mais qui diminue parfois les performances) :
    • Interfaces "standard" avec fonctions toutes virtuelles pures (il suffit au programme appelant de déclarer l'interface)
    • Pattern "factory" avec une interface C (donnent un pointeurs vers Interface, jamais directement l'objet)
    • Une fonction qui utilise LoadLibrary()+GetProcAddress() en interne.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    Pour créer une DLL j'utilise __declspec(dllexport) et c'est du C++ standard...

    Mais enfin, je pense que j'ai eu ma réponse

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/05/2014, 15h19
  2. Utiliser des *.ODS pour exécuter des calculs en PHP.
    Par Gian B. dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 02/05/2014, 10h44
  3. Réponses: 2
    Dernier message: 31/12/2012, 17h42
  4. Des chercheurs utilisent des bactéries pour stocker des données
    Par Katleen Erna dans le forum Actualités
    Réponses: 45
    Dernier message: 19/01/2011, 03h37
  5. [Python] Est-ce une bonne idée d'utiliser des modules pour stocker des objets ?
    Par Neolander dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 05/04/2008, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo