Qu'est-ce qu'une DLL?

90

C'est peut-être une question très simple, mais dans le monde actuel du développement d'applications Web, de nombreux programmeurs n'ont pas besoin de beaucoup gérer les dll, et ne se soucient donc pas de connaître leur objectif.

Alors, qu'est-ce qu'une dll?

  1. A quoi cela sert?
  2. Comment ça marche?
  3. Comment en créer un?
  4. Dans quelles situations est-il approprié d'en créer un?

On m'a dit que les DLL sont utilisées pour stocker des bibliothèques de fonctions, mais au-delà de cela, je ne sais pas grand chose. J'espère que quelqu'un ici pourra m'éclairer pour que je puisse enfin arrêter de me demander ce que font tous ces fichiers .dll dans mon répertoire Windows.

Daniel
la source
Le wiki communautaire doit être utilisé dans les cas où il n'y a pas de réponses réelles à votre question. C'est une question valide et en sélectionnant le mode wiki de la communauté, vous vous empêchez, ainsi que les répondeurs, de gagner des représentants dans cette question.
Cody Brocious
cette question a le potentiel de devenir très populaire
Tamas Czinege
1
Tu penses? Peut-être pour des vues mais pas pour des votes ... Quoi qu'il en soit, il a déjà été répondu 4 fois.
Omar Kooheji le
2
c'est trivialement googleable ...
annakata
3
Oui, c'est googleable, mais je n'ai pas vraiment trouvé beaucoup de bonnes explications concises à ce sujet, en particulier pour la question de la création d'un et quand il est approprié d'en utiliser un.
Daniel

Réponses:

55

Une DLL est une bibliothèque de liens dynamiques. Il s'agit d'un ensemble de code et / ou de données, qui peut être utilisé par plusieurs applications (ou d'autres bibliothèques / modules).

Ainsi, par exemple, des méthodes courantes pour traiter des fichiers, travailler avec des composants d'interface graphique, etc. sont disponibles dans des bibliothèques afin que plusieurs applications puissent utiliser la même fonctionnalité. Cela réduit non seulement le besoin de créer plusieurs fois les mêmes éléments, mais garantit également que, par exemple, les dialogues communs sont les mêmes entre les applications.

Les bibliothèques peuvent être chargées au moment de l'exécution et donc partagées entre différentes applications simultanées. C'est ce qu'on appelle la liaison dynamique.

Dans certains cas, la bibliothèque peut être incluse dans l'application elle-même. C'est ce qu'on appelle la liaison statique. La liaison statique facilite le déploiement au détriment de la flexibilité car différentes applications chargeront chacune la même copie de la DLL.

Cependant, la liaison statique n'est pas toujours une option. Par exemple, vous ne pouvez pas lier statiquement une application .NET. L'utilisateur doit disposer des bibliothèques .NET pour exécuter une application .NET et les bibliothèques (ou assemblys tels qu'ils sont appelés dans .NET) sont chargées au moment de l'exécution.

Les DLL sont créées par les mêmes outils que ceux utilisés pour créer des applications. Les détails spécifiques dépendent beaucoup des outils utilisés.

Brian Rasmussen
la source
Merci pour la réponse, une chose que je me demande est de savoir comment les applications savent quelles fonctions sont disponibles dans la DLL? La dll elle-même est tout le code machine, non? Alors, comment les signatures de fonction publique dans la DLL sont-elles exposées?
Daniel
Je ne connais pas la plupart des langues, mais la saisie semi-automatique de Visual Studio vous montrera toutes les fonctions disponibles.
Grant
1
Mais comment la saisie semi-automatique trouve-t-elle quelles sont les fonctions disponibles si la DLL n'est que du code machine?
Daniel
2
Les machines peuvent lire le code machine. Les DLL peuvent contenir des icônes, des chaînes et des polices. Il y a certainement une liste de ce qu'il contient quelque part là-dedans.
Grant
1
Visual C ++ contient un outil appelé dumpbin - l'exécution de "dumpbin / exports n'importe quel.dll" vous indiquera quelles fonctions et quels éléments sont exportés (c'est-à-dire qui sont disponibles pour être utilisés par les programmes qui chargent la DLL).
Graeme Perrow
29

DLL = Bibliothèque de liens dynamiques

Le nom est en fait assez descriptif de ce qu'ils accomplissent.

Bibliothèque

Vous permet d'isoler le code d'un domaine de problème spécifique dans un emplacement unique. Partagez ensuite ceci entre plusieurs applications. La bibliothèque peut être remplacée par une autre à tout moment pour corriger des bogues ou ajouter des fonctionnalités.

Lien

Vous pouvez "Lier" la bibliothèque à une application afin que la logique de la bibliothèque ne soit pas compilée directement dans l'application.

Dynamique

La bibliothèque peut être chargée à la demande. Au lieu de charger un seul EXE gigantesque en mémoire, le système d'exploitation ne peut charger que les portions nécessaires. De plus, si une DLL est partagée entre des applications, le système d'exploitation peut optimiser la façon dont la bibliothèque est chargée et la partager entre les applications.

Paul Alexander
la source
10

Les fichiers DLL (bibliothèque de liens dynamiques) peuvent être décrits comme de petits «sous-programmes» destinés à aider un programme plus volumineux à bien fonctionner. Ils fournissent un moyen de relier diverses ressources matérielles et logicielles (à divers moments de ses sessions d'exécution) au programme exécutable principal sur lequel elles sont basées, sur une base "selon les besoins". Cela élimine le besoin de charger tout ce qui concerne le programme exécutable principal sur la RAM de l'ordinateur (mémoire vive) lors de la première exécution du programme.

Les ressources logicielles transportées par les DLL incluent du code pour les différentes fonctions du programme qui ne sont pas vraiment nécessaires pour maintenir le programme en cours d'exécution: c'est-à-dire des fonctions qui ne doivent être appelées qu'à certains moments au cours d'une session informatique donnée et qui pourraient même ne pas en avoir besoin. être appelé du tout. Charger ces fonctions (et il peut y en avoir un nombre considérable pour un programme donné) sur la RAM de l'ordinateur lorsque le programme est exécuté pour la première fois, puis les y maintenir tout au long de la session serait un gaspillage d'espace RAM - qui est considéré comme étant à un premium.

Une avancée majeure:

Le développement des DLL était une avancée majeure en informatique, car avant qu'elles ne soient disponibles, tout ce qui concernait un programme (y compris les fonctions qui étaient rarement, voire jamais utilisées) devait être chargé sur la RAM lors du premier chargement du programme. Cela a conduit à un calcul extrêmement inefficace, avec des vitesses plus lentes présentées par divers programmes. Il était également extrêmement difficile d'effectuer plusieurs tâches en exécutant ne serait-ce que quelques programmes simples, en raison de la pression exercée sur la RAM.

Considérations:

Les DLL sont généralement spécifiques à la version. Ceux qui fonctionnent bien pour, par exemple, la version 1 d'un programme (ou un langage de programmation, comme cela peut être le cas) peuvent ne pas fonctionner correctement avec la version 2. La règle générale est que les DLL de l'ancienne version ont tendance à ne pas fonctionner. bien avec la version plus récente, mais ceux de la version plus récente peuvent généralement fonctionner assez bien avec l'ancienne version du programme ou du langage de programmation.

Judy Smith
la source
7

Bibliothèque liée dynamiquement.

Pour vous donner un exemple, si la DLL de quelqu'un d'autre est chargée dans votre application, vous pouvez utiliser des morceaux de programmation à partir de celle-ci.

Vous pouvez charger une DLL qui génère des nombres aléatoires qui commencent toujours par «5» ou quelque chose.

Dans votre programme, vous pouvez appeler CrazyDLL.GenerateRandomNumbersSorta () et il renverra le numéro.

Pour un exemple du monde réel, j'ai une DLL qui combine 4 zones de texte (vous les utiliseriez pour taper des adresses IP) et elle n'accepte automatiquement que les nombres inférieurs à 256, et gère en appuyant sur la touche de retour arrière pour sauter à une zone de texte précédente.

J'ai créé une DLL avec ce code, et maintenant tout ce que j'ai à faire est de faire glisser et déposer davantage de ces collections de boîtes de texte d'adresses IP sans avoir à dupliquer tout ce code encore et encore.

La même DLL a également une fonction pour convertir les adresses IP en chaînes hexadécimales et en d'autres codes utiles.

Grant
la source
1

À partir de la bibliothèque MSDN :

Une bibliothèque de liens dynamiques (DLL) est un module qui contient des fonctions et des données pouvant être utilisées par un autre module (application ou DLL).

Nemanja Trifunovic
la source
1

DLL = Bibliothèque de liens de chargement dynamique . Comme on vous l'a dit, il s'agit essentiellement d'une collection de fonctions, de classes C ++ et / ou de variables globales. Vous pouvez charger la DLL de manière statique (c'est-à-dire que le système d'exploitation la charge automatiquement lorsque votre programme démarre) ou dynamiquement (votre programme le charge explicitement), à quel point les fonctions et les éléments contenus dans la DLL sont disponibles pour votre programme.

En créer un est similaire à la création d'un EXE, sauf qu'il n'est pas nécessaire d'avoir une main()fonction. Il existe des directives de l'éditeur de liens pour indiquer à l'éditeur de liens de créer une DLL plutôt qu'un EXE.

La principale raison pour laquelle vous voulez faire cela est d'encapsuler du code en un seul endroit et de l'utiliser à partir de plusieurs exe, plutôt que de lier le code à chacun.

Une raison quelque peu historique est que votre exe peut être plus petit car une partie du code est physiquement située dans un fichier différent. Cela signifie que la quantité d'espace occupé en mémoire par votre exe peut être plus petite. Sur les systèmes modernes, c'est moins un problème qu'auparavant, bien que cela puisse toujours être un problème sur Windows Mobile.

Graeme Perrow
la source