Quel est le format de fichier dll ?
Le fichier DLL (Dynamic Linkable Library) est un fichier qui ne peut pas être exécuté seul. Il permet aux programmes de partager du code et d'autres ressources nécessaires pour effectuer des tâches spéciales
Des applications relativement volumineuses sont composées. de nombreux modules. Ces modules remplissent des fonctions relativement indépendantes. Ils coopèrent les uns avec les autres pour compléter le travail de l'ensemble du système logiciel. Il peut y avoir certains modules dont les fonctions sont plus générales et seront toujours utilisés lors de la construction d'autres systèmes logiciels. Lors de la construction d'un système logiciel, si le code source de tous les modules est compilé de manière statique dans l'ensemble du fichier EXE de l'application, certains problèmes surgiront : Un inconvénient est que cela augmente la taille de l'application, ce qui occupe plus d'espace disque et le programme s'exécute. Cela consommera également une grande quantité d'espace mémoire, entraînant un gaspillage de ressources système ; un autre inconvénient est que lors de l'écriture d'un programme EXE volumineux, tous les codes sources doivent être ajustés et compilés à chaque fois qu'il est modifié et reconstruit, ce qui augmente la complexité de le processus de compilation, qui n'est pas non plus propice aux tests unitaires par étapes.
La plate-forme système Windows offre un environnement de programmation et d'exécution complètement différent et plus efficace. Vous pouvez créer des modules de programme indépendants sous forme de fichiers DLL plus petits, et les compiler et les tester séparément. Au moment de l'exécution, le système chargera ces modules DLL dans l'espace mémoire uniquement si le programme EXE souhaite réellement les appeler. Cette approche réduit non seulement la taille du fichier EXE et les besoins en espace mémoire, mais permet également à ces modules DLL d'être utilisés par plusieurs applications en même temps. Windows lui-même implémente certaines fonctions système majeures sous la forme de modules DLL.
De manière générale, une DLL est un fichier disque. Les fichiers système avec .dll, .DRV, .FON, .SYS et de nombreuses extensions .EXE peuvent être des DLL. Il se compose de données globales, de fonctions de service et de ressources. Il est chargé dans l'espace virtuel du processus appelant par le système au moment de l'exécution et devient partie intégrante du processus appelant. S'il n'y a pas de conflits avec d'autres DLL, le fichier est généralement mappé à la même adresse dans l'espace virtuel du processus. Le module DLL contient diverses fonctions exportées pour fournir des services au monde extérieur. Une DLL peut avoir son propre segment de données, mais n'a pas sa propre pile, utilisant le même mode de pile que l'application qui l'appelle ; une DLL n'a qu'une seule instance en mémoire ; la DLL implémente l'encapsulation du code ; est lié au langage de programmation spécifique. Cela n'a rien à voir avec le compilateur.
Dans un environnement Win32, chaque processus copie ses propres variables globales en lecture/écriture. Si vous souhaitez partager de la mémoire avec d'autres processus, vous devez utiliser un fichier mappé en mémoire ou déclarer un segment de données partagé. La mémoire de pile requise par les modules DLL est allouée à partir de la pile du processus en cours d'exécution. Windows fait correspondre les appels de fonction de processus aux fonctions exportées du fichier DLL lorsqu'il charge un module DLL. Le fonctionnement du système d'exploitation Windows sur la DLL consiste uniquement à mapper la DLL dans l'espace d'adressage virtuel du processus qui en a besoin. Tous les objets (y compris les variables) créés par le code dans une fonction DLL appartiennent au thread ou au processus qui l'appelle.
Méthode d'appel :
1. Méthode d'appel statique : Le système de compilation termine le chargement de la DLL et l'encodage du déchargement de la DLL à la fin de l'application (s'il y a sont d'autres programmes Lors de l'utilisation de cette DLL, Windows décrémentera l'enregistrement d'application de la DLL de 1 et ne le publiera pas tant que tous les programmes associés n'auront pas fini d'utiliser la DLL. C'est simple et pratique, mais pas assez flexible et ne peut répondre qu'à des questions générales. Exigences. Appel implicite : Le fichier .LIB généré lors de la génération de la bibliothèque de liens dynamiques doit être ajouté au projet d'application. Lorsque vous souhaitez utiliser les fonctions de la DLL, il vous suffit d'expliquer que l'appel implicite ne nécessite pas l'appel de LoadLibrary (. ) et FreeLibrary(). Lorsqu'un programmeur crée un fichier DLL, l'éditeur de liens génère automatiquement un fichier d'importation LIB correspondant. Ce fichier contient le nom symbolique et le numéro d'identification facultatif de chaque fonction exportée par DLL, mais ne contient pas le code réel. Le fichier LIB est compilé dans le projet d'application en tant que fichier de remplacement de la DLL. Lorsque le programmeur compile et génère l'application via une liaison statique, les fonctions appelantes dans l'application correspondent aux symboles exportés dans le fichier LIB. le fichier EXE généré. Le fichier LIB contient également le nom du fichier DLL correspondant (mais pas le nom de chemin complet), et l'éditeur de liens le stocke dans le fichier EXE. Lorsqu'une application doit charger un fichier DLL, Windows découvre et charge la DLL. sur la base de ces informations, puis lie dynamiquement la fonction DLL via le nom du symbole ou le numéro d'identification. Tous les fichiers DLL appelés par l'application seront chargés dans l'application. Le fichier EXE est chargé en mémoire. Le programme exécutable est lié à une bibliothèque d'entrée. (fichier .LIB) qui contient les informations sur la fonction de sortie de la DLL. Le système d'exploitation charge la DLL directement via le nom de la fonction. La fonction de sortie et la méthode d'appel sont les mêmes que les autres fonctions du programme
2. . Méthode d'appel dynamique : le programmeur utilise les fonctions API pour charger et décharger la DLL afin d'atteindre l'objectif d'appeler la DLL, ce qui est plus compliqué à utiliser, mais peut utiliser la mémoire plus efficacement et constitue un moyen important de programmer des applications volumineuses .
Appel explicite :
fait référence à l'utilisation de LoadLibrary ou AfxLoadLibrary fourni par MFC pour appeler explicitement la bibliothèque de liens dynamiques que vous avez créée dans l'application. Le nom de fichier de la bibliothèque de liens dynamiques correspond aux paramètres ci-dessus. deux fonctions, puis utilisez GetProcAddress() pour obtenir la fonction que vous souhaitez introduire. Désormais, vous pouvez appeler cette fonction importée comme une fonction personnalisée dans cette application. Avant la fermeture de l'application, la bibliothèque de liens dynamiques doit être publiée à l'aide de FreeLibrary ou AfxFreeLibrary fourni par MFC. Appelez directement la fonction Win32 LoadLibary et spécifiez le chemin d'accès à la DLL en tant que paramètre. LoadLibary renvoie le paramètre HINSTANCE que l'application utilise lors de l'appel de la fonction GetProcAddress. La fonction GetProcAddress convertit un nom symbolique ou un numéro d'identification en une adresse dans la DLL. Le programmeur peut décider quand un fichier DLL est chargé ou non, une liaison explicite détermine quel fichier DLL est chargé au moment de l'exécution. Les programmes qui utilisent la DLL doivent charger (LoadLibrary) avant utilisation pour charger la DLL afin d'obtenir un handle vers le module DLL, puis appeler la fonction GetProcAddress pour obtenir le pointeur de la fonction de sortie. La DLL doit être déchargée (FreeLibrary) avant de quitter.
Étant donné que les DLL ont les caractéristiques d'une faible utilisation de la mémoire et d'une édition facile, de nombreux virus informatiques sont des fichiers au format DLL. Mais il ne peut pas être géré seul.
Les bibliothèques de liens dynamiques ne peuvent généralement pas s'exécuter directement et ne peuvent pas recevoir de messages. Ce sont des fichiers indépendants contenant des fonctions qui peuvent être appelées par un programme exécutable ou une autre DLL pour effectuer une certaine tâche. Cela ne fonctionne que lorsque d'autres modules appellent des fonctions dans la bibliothèque de liens dynamiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!