web-dev-qa-db-fra.com

En quoi consistent exactement les fichiers DLL et comment fonctionnent-ils?

Comment fonctionnent exactement les fichiers DLL? Il semble y en avoir énormément, mais je ne sais pas ce qu'ils sont ni comment ils fonctionnent.

Alors, quel est le problème avec eux?

193
stalepretzel

Qu'est-ce qu'une DLL?

Les bibliothèques de liens dynamiques (DLL) ressemblent à des fichiers EXE, mais elles ne sont pas directement exécutables. Ils sont similaires aux fichiers .so sous Linux/Unix. C'est-à-dire que les DLL sont l'implémentation par MS de bibliothèques partagées.

Les DLL ressemblent tellement à un EXE que le format de fichier est le même. Les fichiers EXE et DLL sont tous deux basés sur le format de fichier Portable Executable (PE). Les DLL peuvent également contenir des composants COM et des bibliothèques .NET.

Que contient un DLL?

Un DLL contient des fonctions, des classes, des variables, des interfaces utilisateur et des ressources (telles que des icônes, des images, des fichiers, ...) utilisés par un EXE ou un autre DLL.

Types de bibliothèques:

Sur pratiquement tous les systèmes d'exploitation, il existe 2 types de bibliothèques. Bibliothèques statiques et bibliothèques dynamiques. Dans Windows, les extensions de fichier sont les suivantes: Bibliothèques statiques (.lib) et bibliothèques dynamiques (.dll). La principale différence est que les bibliothèques statiques sont liées à l'exécutable au moment de la compilation. tandis que les bibliothèques liées dynamiques ne sont pas liées jusqu'au moment de l'exécution.

Plus d'informations sur les bibliothèques statiques et dynamiques:

Vous ne voyez normalement pas de bibliothèques statiques sur votre ordinateur, car une bibliothèque statique est incorporée directement dans un module (EXE ou DLL). Une bibliothèque dynamique est un fichier autonome.

Un DLL peut être modifié à tout moment et n'est chargé qu'à l'exécution lorsqu'un fichier EXE charge explicitement la DLL. Une bibliothèque statique ne peut pas être modifiée une fois compilée dans le fichier EXE. Un DLL peut être mis à jour individuellement sans mettre à jour le fichier EXE lui-même.

Chargement d'une DLL:

Un programme charge une DLL au démarrage, via l'API Win32 LoadLibrary ou lorsqu'il s'agit d'une dépendance d'une autre DLL. Un programme utilise GetProcAddress pour charger une fonction ou LoadResource pour charger une ressource.

Lectures supplémentaires:

Veuillez vérifier MSDN ou Wikipedia pour en savoir plus. Aussi les sources de cette réponse.

254
Brian R. Bondy

Qu'est-ce qu'une DLL?

Les fichiers DLL sont des fichiers binaires pouvant contenir du code exécutable et des ressources telles que des images, etc. Contrairement aux applications, ceux-ci ne peuvent pas être exécutés directement, mais une application les charge au fur et à mesure qu'ils sont requis (ou tous en même temps au démarrage).

Sont-ils importants?

La plupart des applications chargeront les fichiers DLL dont elles ont besoin au démarrage. Si aucun de ces éléments n'est trouvé, le système ne pourra pas démarrer le processus.

Les fichiers DLL peuvent nécessiter d'autres fichiers DLL

De la même manière qu'une application nécessite un fichier DLL, un fichier DLL peut être dépendant d'autres fichiers DLL. Si l'un de ces fichiers DLL de la chaîne de dépendance n'est pas trouvé, l'application ne se chargera pas. Ceci est facilement mis au point en utilisant n’importe quel outil de gestion des dépendances, tel que Dependency Walker .

Il y en a tellement dans les dossiers système

La plupart des fonctionnalités du système sont exposées à un programme utilisateur sous la forme de fichiers DLL, car ils constituent une forme standard de partage de code/ressources. Chaque fonctionnalité est conservée séparément dans différents fichiers DLL afin que seuls les fichiers DLL requis soient chargés et réduise ainsi les contraintes de mémoire sur le système.

Les applications installées utilisent également les fichiers DLL

Les fichiers DLL deviennent également une forme de séparation physique des fonctionnalités, comme expliqué ci-dessus. Les bonnes applications essaient également de ne pas charger les fichiers DLL tant qu'ils ne sont pas absolument nécessaires, ce qui réduit les besoins en mémoire. De plus, les applications sont livrées avec un grand nombre de fichiers DLL.

DLL Hell

Cependant, il arrive parfois que les mises à niveau du système interrompent souvent d'autres programmes en cas de disparité de version entre les fichiers partagés DLL et le programme qui les requiert. Les points de contrôle du système et le cache DLL, etc. ont été les initiatives de M $ pour résoudre ce problème. La plate-forme .NET pourrait ne pas être confrontée à ce problème.

Comment savons-nous ce qu'il y a dans un fichier DLL?

Vous devez utiliser un outil externe tel que DUMPBIN ou Dependency Walker, qui indiquera non seulement les fonctions accessibles au public (connues sous le nom d’exportations) contenues dans les fichiers DLL, ainsi que les fonctions correspondantes. autres fichiers DLL nécessaires et exportés à partir de ces fichiers DLL auxquels ce fichier DLL dépend.

Comment crée-t-on/utilise-t-on?

Reportez-vous à la documentation de programmation de votre fournisseur. Pour C++, reportez-vous à LoadLibrary dans MSDN.

33
computinglife

Supposons que vous créez un exécutable qui utilise certaines fonctions d’une bibliothèque.

Si la bibliothèque que vous utilisez est statique , l'éditeur de liens copiera le code objet de ces fonctions directement à partir de la bibliothèque et les insérera dans l'exécutable.

Maintenant, si cet exécutable est exécuté, il dispose de tout ce dont il a besoin. Le chargeur de programmes exécutables le charge simplement en mémoire et l'exécute.

Si la bibliothèque est dynamique , l’éditeur de liens n’insérera pas de code objet, mais insérera un stub indiquant que cette fonction est située dans DLL à cet endroit.

Désormais, si cet exécutable est exécuté, il manque des bits (c’est-à-dire les talons), de sorte que le chargeur passe au travers de l’exécutable en corrigeant les talons manquants. L'exécutable ne sera autorisé à s'exécuter que lorsque tous les stubs auront été résolus.

Pour voir cela en action, supprimez ou renommez la DLL et regardez comment le chargeur signalera une erreur manquante DLL lorsque vous essayez d'exécuter le fichier exécutable.

D'où le nom Bibliothèque de liens dynamiques , une partie du processus de liaison est effectuée de manière dynamique au moment de l'exécution par le chargeur exécutable.

Une dernière remarque, si vous ne créez pas de lien vers la DLL, aucun lien ne sera inséré par l’éditeur de liens, mais Windows fournit toujours le GetProcAddress API permettant de charger un point d’entrée de la fonction DLL longtemps après le démarrage de l’exécutable.

12
jussij

Les DLL (bibliothèques de liens dynamiques) et les SL (bibliothèques partagées, équivalentes sous UNIX) ne sont que des bibliothèques de code exécutable pouvant être liées dynamiquement dans un exécutable au moment du chargement.

Les bibliothèques statiques sont insérées dans un exécutable lors de la compilation et sont fixées à partir de ce point. Ils augmentent la taille de l'exécutable et ne peuvent pas être partagés.

Les bibliothèques dynamiques présentent les avantages suivants:

1/Ils sont chargés au moment de l'exécution plutôt que lors de la compilation, de sorte qu'ils puissent être mis à jour indépendamment de l'exécutable (toutes ces fenêtres et boîtes de dialogue sophistiquées que vous voyez dans Windows proviennent de DLL afin que l'apparence de votre application puisse changer sans vous. avoir à le réécrire).

2/Parce qu’ils sont indépendants, le code peut être partagé entre plusieurs exécutables - cela économise de la mémoire car, si vous exécutez 100 applications avec une seule DLL, il ne peut y avoir qu’une copie du DLL dans Mémoire.

Leur principal inconvénient est l’avantage numéro 1: le fait de modifier les DLL indépendamment de votre application peut empêcher votre application de fonctionner ou de se comporter de manière étrange. DLL la gestion des versions ne fonctionne généralement pas très bien sous Windows, ce qui conduit à un "DLL Hell" étrangement nommé.

11
paxdiablo

Les fichiers DLL contiennent une table d'exportation , qui est une liste de symboles pouvant être recherchés par le programme appelant. Les symboles sont généralement des fonctions avec le convention d'appel C ( __ stcall ). La table d'exportation contient également l'adresse de la fonction.

Avec cette information, le programme appelant peut alors appeler les fonctions de la DLL même s'il n'a pas accès à la DLL au moment de la compilation.

Présentation des bibliothèques de liens dynamiques contient des informations supplémentaires.

10
Adam Pierce

http://support.Microsoft.com/kb/815065

Un DLL est une bibliothèque contenant du code et des données pouvant être utilisés simultanément par plusieurs programmes. Par exemple, dans les systèmes d'exploitation Windows, Comdlg32 DLL exécute les fonctions courantes liées aux boîtes de dialogue. Par conséquent, chaque programme peut utiliser la fonctionnalité contenue dans ce DLL pour implémenter une boîte de dialogue Ouvrir. Cela aide à promouvoir la réutilisation du code et une utilisation efficace de la mémoire.

En utilisant une DLL, un programme peut être modularisé en composants distincts. Par exemple, un programme de comptabilité peut être vendu par module. Chaque module peut être chargé dans le programme principal au moment de l'exécution si ce module est installé. Les modules étant distincts, le temps de chargement du programme est plus rapide et un module n'est chargé que lorsque cette fonctionnalité est demandée.

De plus, les mises à jour sont plus faciles à appliquer à chaque module sans affecter les autres parties du programme. Par exemple, vous pouvez avoir un programme de paie et les taux d'imposition changent chaque année. Lorsque ces modifications sont isolées dans une DLL, vous pouvez appliquer une mise à jour sans avoir à générer ou à réinstaller le programme complet.

http://en.wikipedia.org/wiki/Dynamic-link_library

6
Jorge Ferreira

DLL est un format de fichier "Bibliothèque de liens dynamiques" utilisé pour contenir plusieurs codes et procédures pour les programmes Windows. Logiciels et jeux fonctionne sur les bases de DLL Fichiers; Les fichiers DLL ont été créés afin que plusieurs applications puissent utiliser leurs informations en même temps.

SI vous voulez obtenir plus d’informations sur DLL Fichiers ou si vous faites face à une erreur, lisez le post suivant. https://www.bouncegeek.com/fix-dll-errors-windows-586985/

2
Akshya Nagar

Les DLL (bibliothèques de liens dynamiques) contiennent des ressources utilisées par une ou plusieurs applications ou services. Ils peuvent contenir des classes, des icônes, des chaînes, des objets, des interfaces et à peu près tout ce qu'un développeur devrait stocker, à l'exception d'une interface utilisateur.

1
tsilb