[{"@context":"http:\/\/schema.org\/","@type":"BlogPosting","@id":"https:\/\/wiki.edu.vn\/all2fr\/wiki1\/bibliotheque-de-liens-dynamiques-wikipedia\/#BlogPosting","mainEntityOfPage":"https:\/\/wiki.edu.vn\/all2fr\/wiki1\/bibliotheque-de-liens-dynamiques-wikipedia\/","headline":"Biblioth\u00e8que de liens dynamiques – Wikipedia","name":"Biblioth\u00e8que de liens dynamiques – Wikipedia","description":"before-content-x4 Biblioth\u00e8que de liens dynamiques Extension de fichier: .dll, .dll Type mime: application \/ vnd.microsoft.portable-ex\u00e9cutable, application \/ x-msdownload, application \/","datePublished":"2020-09-12","dateModified":"2020-09-12","author":{"@type":"Person","@id":"https:\/\/wiki.edu.vn\/all2fr\/wiki1\/author\/lordneo\/#Person","name":"lordneo","url":"https:\/\/wiki.edu.vn\/all2fr\/wiki1\/author\/lordneo\/","image":{"@type":"ImageObject","@id":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","height":96,"width":96}},"publisher":{"@type":"Organization","name":"Enzyklop\u00e4die","logo":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":600,"height":60}},"image":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":100,"height":100},"url":"https:\/\/wiki.edu.vn\/all2fr\/wiki1\/bibliotheque-de-liens-dynamiques-wikipedia\/","wordCount":6930,"articleBody":" (adsbygoogle = window.adsbygoogle || []).push({});before-content-x4Biblioth\u00e8que de liens dynamiques Extension de fichier: .dll, .dll Type mime: application \/ vnd.microsoft.portable-ex\u00e9cutable, application \/ x-msdownload, application \/ trace d’octet D\u00e9velopp\u00e9 par: Microsoft Art: biblioth\u00e8que dynamique Biblioth\u00e8que de liens dynamiques (du Anglais emprunt\u00e9; court Dll ) d\u00e9signe g\u00e9n\u00e9ralement une biblioth\u00e8que de programmes dynamiques; Cependant, le terme fait g\u00e9n\u00e9ralement r\u00e9f\u00e9rence \u00e0 la variante utilis\u00e9e pour les syst\u00e8mes d’exploitation Windows et OS \/ 2. [d’abord] [2] (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Les fichiers DLL utilisent \u00e9galement le format de fichier utilis\u00e9 pour les fichiers EXE ex\u00e9cutables, qui dans les programmes 16 bits le nouveau format ex\u00e9cutable (NE), [3] Dans les programmes 16 et 32 \u200b\u200bbits, le format existable lin\u00e9aire (LE ou LX, OS \/ 2) ainsi que dans les programmes 32 et 64 bits sont le format ex\u00e9cutable portable (PE, Windows). Ces fichiers peuvent contenir du code de programme (code machine), des donn\u00e9es et des ressources dans n’importe quelle combinaison. L’extension de fichier Windows pour ces biblioth\u00e8ques est g\u00e9n\u00e9ralement Dll . De plus, cependant, d’autres fichiers se terminaient Cpl (pour le contr\u00f4le du contr\u00f4le), OCX (pour les biblioth\u00e8ques avec des contr\u00f4les ActiveX) ou aussi DRV (pour les conducteurs). L’objectif principal des fichiers DLL est de r\u00e9duire l’espace de stockage requis par les applications sur le disque dur et dans la m\u00e9moire principale. Le code et les donn\u00e9es qui pourraient \u00eatre n\u00e9cessaires par plus d’une application sont donc enregistr\u00e9s dans un seul fichier sur le disque dur et ne sont charg\u00e9s que dans la m\u00e9moire principale une fois si plusieurs programmes ont besoin de la m\u00eame biblioth\u00e8que de programmes. [4] (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Table of ContentsAvantages suppl\u00e9mentaires [ Modifier | Modifier le texte source ]] faiblesses [ Modifier | Modifier le texte source ]] T\u00e9l\u00e9charger les DLL dans un programme de programme [ Modifier | Modifier le texte source ]] Structure de fichiers DLL [ Modifier | Modifier le texte source ]] Appeler une commande DLL par un programme [ Modifier | Modifier le texte source ]] DLLS dans la m\u00e9moire [ Modifier | Modifier le texte source ]] Compteur d’instance de dll [ Modifier | Modifier le texte source ]] Travailler avec les DLL dans Visual C ++ [ Modifier | Modifier le texte source ]] Cr\u00e9ation d’une DLL avec une fonction [ Modifier | Modifier le texte source ]] Intetting une DLL et appeler cette fonction [ Modifier | Modifier le texte source ]] Intetting une DLL au terme et appeler cette fonction [ Modifier | Modifier le texte source ]] Utilisez des DLL dans l’objet Pascal [ Modifier | Modifier le texte source ]] Cr\u00e9er une DLL [ Modifier | Modifier le texte source ]] Entrez \/ appelez une DLL [ Modifier | Modifier le texte source ]] DLLS dans Visual Basic Classic Verwenden [ Modifier | Modifier le texte source ]] Utilisez des DLL Win32 dans le framework .NET [ Modifier | Modifier le texte source ]] C # [ Modifier | Modifier le texte source ]] Vb.net [ Modifier | Modifier le texte source ]] Int\u00e9gration directe des DLL dans Visual Studio [ Modifier | Modifier le texte source ]] C # [ Modifier | Modifier le texte source ]] Vb.net [ Modifier | Modifier le texte source ]] Avantages suppl\u00e9mentaires [ Modifier | Modifier le texte source ]] Si un code de programme est am\u00e9lior\u00e9, tous les programmes qui utilisent ce code doivent \u00eatre modifi\u00e9s, mais il suffit de le mettre \u00e0 jour dans la DLL. Dans ce cas, tous les programmes peuvent acc\u00e9der \u00e0 la version mise \u00e0 jour. Cela permet aux d\u00e9veloppeurs de logiciels d’\u00e9mettre des correctifs relativement petits pour des packages de logiciels plus grands, par exemple pour des syst\u00e8mes d’exploitation entiers. Un package entier peut \u00eatre mis \u00e0 jour en mettant \u00e0 jour les DLL individuelles. Sous la forme de plug-ins, les DLL peuvent cr\u00e9er de nouvelles pi\u00e8ces de programme pour un programme existant et y int\u00e9grer de mani\u00e8re transparente sans avoir \u00e0 modifier les programmes existants. Cette id\u00e9e de \u00abl’int\u00e9gration\u00bb dynamique est r\u00e9alis\u00e9e par ActiveX, par exemple sous Windows. Une telle structure modulaire ne peut pas \u00eatre facilement d\u00e9sactiv\u00e9e. (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4faiblesses [ Modifier | Modifier le texte source ]] Un probl\u00e8me mentionn\u00e9 dans Windows se produit \u00e9galement lorsque plusieurs applications n\u00e9cessitent diff\u00e9rentes versions de la m\u00eame DLL. Si la version requise n’a pas de programme, cela peut entra\u00eener des probl\u00e8mes tels que des installations incorrectes. Ce conflit peut souvent \u00eatre corrig\u00e9 en copie la version correcte de la biblioth\u00e8que de programmes dans le dossier du programme du programme respectif. Cependant, l’effet des \u00e9conomies de m\u00e9moire est \u00e0 nouveau d\u00e9truit. Avec Microsoft .NET, il est possible d’\u00e9viter les conflits de version sur les fichiers DLL en permettant l’existence simultan\u00e9e de plusieurs versions d’une biblioth\u00e8que de programmes. Cependant, cela n’est possible que pour les fichiers DLL d\u00e9velopp\u00e9s avec .NET. Dans certains cas, le d\u00e9tournement de DLL ou l’utilisation maligne de l’injection de DLL est possible. T\u00e9l\u00e9charger les DLL dans un programme de programme [ Modifier | Modifier le texte source ]] Si un programme doit \u00eatre ex\u00e9cut\u00e9, il est charg\u00e9 dans la m\u00e9moire par le chargeur du syst\u00e8me d’exploitation et le tableau d’importation du programme est lu. Dans ce tableau, il y a tous les noms de commande DLL ou les num\u00e9ros de commande des commandes DLL requises par ce programme. Le chargeur invite d\u00e9sormais les DLL manquantes dans la m\u00e9moire et ajoute le Table d’importation du programme Les adresses d’entr\u00e9e des commandes individuelles. Structure de fichiers DLL [ Modifier | Modifier le texte source ]] Une DLL a (selon l’en-t\u00eate MZ) la m\u00eame en-t\u00eate NE, LE ou PE comme fichier ex\u00e9cutable normal, uniquement en cas de drapeau DWORD \u00e0 l’adresse 0c est hexagonal dans l’en-t\u00eate NE \u00e0 8000 hexagonal SET (Flag des modules de biblioth\u00e8que) [3] ou dans l’en-t\u00eate PE Im Caract\u00e9ristiques -Value que Image_file_dll -T set. Tandis que les DLL et les fichiers ex\u00e9cutables ont un Exportation Ceci est rarement utilis\u00e9 dans ce dernier. Dans cette “table d’exportation”, tous les noms des fonctions et variables sont r\u00e9pertori\u00e9s, que la DLL fournit avec un logiciel externe. Ces noms doivent \u00eatre tri\u00e9s par ordre alphab\u00e9tique pour que le chargeur puisse les trouver. Appeler une commande DLL par un programme [ Modifier | Modifier le texte source ]] Tout d’abord, les valeurs \u00e0 transf\u00e9rer \u00e0 d’autres sous-programmes sont stock\u00e9es sur la pile, puis un saut indirect est effectu\u00e9 \u00e0 la valeur de l’adresse DLL stock\u00e9e par le chargeur dans le tableau d’importation. DLLS dans la m\u00e9moire [ Modifier | Modifier le texte source ]] Il existe deux variantes diff\u00e9rentes de la fa\u00e7on dont les DLL peuvent \u00eatre charg\u00e9es dans la m\u00e9moire \u00e0 partir du syst\u00e8me d’exploitation. Il y a des DLL statiques qui ne sont charg\u00e9es qu’une seule fois. Tous les programmes acc\u00e8dent ensuite \u00e0 cette seule instance de la DLL. Cette DLL n’a alors qu’une seule zone de m\u00e9moire globale. Les DLL Windows-Kernel sont des DLL statiques, ce qui leur permet de g\u00e9rer l’ensemble du syst\u00e8me (par exemple, surveillant tous les fichiers ouverts).Pour g\u00e9rer une autre variante de DLL dans la m\u00e9moire, c’est que, chaque fois qu’un nouveau programme a besoin d’une DLL, une nouvelle instance est charg\u00e9e dans la m\u00e9moire par elle. Un autre drapeau de l’en-t\u00eate DLL d\u00e9termine si une DLL est statique ou non. Compteur d’instance de dll [ Modifier | Modifier le texte source ]] Chaque fois qu’une DLL est charg\u00e9e par un programme, un compteur d’instance interne pour cette DLL est augment\u00e9. Le syst\u00e8me peut reconna\u00eetre ce compteur si une DLL est toujours utilis\u00e9e ou peut \u00eatre d\u00e9charg\u00e9e. Ce dernier se produit lorsque le compteur d’instance atteint z\u00e9ro car le dernier programme en cours d’ex\u00e9cution que la DLL a utilis\u00e9, que DLL a d\u00e9charg\u00e9 et il n’a pas \u00e0 \u00eatre conserv\u00e9 dans la m\u00e9moire. Travailler avec les DLL dans Visual C ++ [ Modifier | Modifier le texte source ]] Cr\u00e9ation d’une DLL avec une fonction [ Modifier | Modifier le texte source ]] L’interface DLL est utilis\u00e9e \u00e0 l’aide de la fonction d’exportation __DeclsSpec (Dllexport) Sont d\u00e9finis. Ceci est d\u00e9montr\u00e9 dans l’exemple suivant: \/\/ uniquement sous Microsoft Visual C ++ La macro \"DLL\" a une fonction. \/\/ sous Linux, par exemple, la macro \"DLL\" est vide. #if d\u00e9fini (_msc_ver) #inclure #define dll extern \"c\" __declspec (dllexport) #autre #define dll #fin si \/\/ La fonction qui doit \u00eatre mise \u00e0 la disposition d'autres programmes \/\/ (dans cet exemple: ajouter deux nombres) Dll double Nombres ( double un , double b ) { retour un + b ; } Cet exemple en cr\u00e9e un lors de la compilation Dll ainsi qu’un Lib -D\u00e9poser. Intetting une DLL et appeler cette fonction [ Modifier | Modifier le texte source ]] Les fonctions DLL peuvent simplement \u00eatre appel\u00e9es apr\u00e8s vous __DeclsSpec (dllimport) import\u00e9. #inclure #inclure \/\/ importe la fonction de la DLL cr\u00e9\u00e9e ci-dessus externe \"C\" __declspec ( dllimport ) double Nombres ( double un , double b ) ; int principal ( annuler ) { \/\/ appelle la fonction externe double r\u00e9sultat = Nombres ( d'abord , 2 ) ; printf ( \"Le r\u00e9sultat est:% f n \" , r\u00e9sultat ) ; return 0 ;}Il convient de noter que celle de gauche a besoin du fichier Lib et que le fichier DLL doit \u00eatre dans le m\u00eame dossier que le programme qu’il devrait l’appeler. Le fichier Lib est requis par la gauche afin qu’il puisse installer “Planholder” pour les fonctions appel\u00e9es plus tard de la DLL. Intetting une DLL au terme et appeler cette fonction [ Modifier | Modifier le texte source ]] Les biblioth\u00e8ques DLL peuvent \u00eatre charg\u00e9es en une seule application de deux mani\u00e8res diff\u00e9rentes: soit lorsque le programme est d\u00e9marr\u00e9 (comme d\u00e9crit dans les exemples ci-dessus) ou seulement plus tard pendant le terme par les fonctions de l’API Library , GetProcaddress et Freelibrary utilis\u00e9. La fa\u00e7on dont les DLL doivent \u00eatre int\u00e9gr\u00e9es pendant le terme est la m\u00eame dans chaque langage de programmation tant que vous souhaitez importer une fonction API Windows. Le code suivant le d\u00e9montre en utilisant des exemples de VC ++: #inclure #inclure \/\/ D\u00e9finition du type de fonction DLL, qui doit \u00eatre utilis\u00e9e typedef double ( * BinaryFunction_T ) ( double , double ) ; int principal ( annuler ) { BinaryFunction_T Nombres ; double r\u00e9sultat ; BOOL fFreeResult ; \/\/ DLL-Datei laden HINSTANCE hinstLib = LoadLibrary (\"MyDll.dll\") ; if (hinstLib != NULL) { \/\/ Die Einsprungadresse abfragen AddNumbers = (BinaryFunction_t) GetProcAddress (hinstLib, \"AddNumbers\") ; \/\/ Die Funktion aufrufen if ( AddNumbers != NULL ) result = (*AddNumbers) (1, 2) ; \/\/ Die DLL-Datei wieder entladen fFreeResult = FreeLibrary (hinstLib) ; } \/\/ Das Ergebnis anzeigen if (hinstLib == NULL || AddNumbers == NULL) printf (\"Fehler: Konnte die Funktion nicht aufrufenn\") ; else printf (\"Das Ergebnis ist: %fn\", result) ; return 0 ;}Le Lib -Le fichier n’est pas requis dans ce cas. Le Dll -Tile, cependant, doit encore \u00eatre dans un dossier accessible au programme. Il convient \u00e9galement de noter que lorsque vous essayez d’avoir une DLL non existante directement charg\u00e9e directement lorsque vous d\u00e9marrez le programme, un message d’erreur s’affiche \u00e0 partir du syst\u00e8me d’exploitation et le programme se termine sans que le programmeur n’ait un moyen d’intercepter cette erreur. Cependant, lors de l’int\u00e9gration des DLL pendant le terme, les erreurs de chargement peuvent \u00eatre intercept\u00e9es. Utilisez des DLL dans l’objet Pascal [ Modifier | Modifier le texte source ]] Cr\u00e9er une DLL [ Modifier | Modifier le texte source ]] Le mot-cl\u00e9 doit \u00eatre dans la t\u00eate du code source biblioth\u00e8que au lieu de programme \u00eatre utilis\u00e9. \u00c0 la fin du fichier, les fonctions \u00e0 exporter sont alors exportations -Area r\u00e9pertori\u00e9e: biblioth\u00e8que Exemple ; \/\/ La fonction qui doit \u00eatre mise \u00e0 la disposition d'autres programmes \/\/ (dans cet exemple: ajouter deux nombres) fonction Nombres ( un , b : Double ) : Double ; CDECL ; commencer R\u00e9sultat : = un + b ; fin ; \/\/ exporter la fonction exportations Nombres ; \/\/ Dans ce cas, aucun code source d'initialisation sp\u00e9cial ne doit \u00eatre sp\u00e9cifi\u00e9 commencer fin . Entrez \/ appelez une DLL [ Modifier | Modifier le texte source ]] Delphi n’a besoin d’aucun Lib -Files afin de pouvoir importer correctement une fonction. Pour int\u00e9grer une DLL uniquement le mot-cl\u00e9 externe \u00eatre utilis\u00e9: programme Exemple ; {$ Apptype Console} \/\/ importe la fonction \u00e0 partir d'une DLL externe fonction Nombres ( un , b : Double ) : Double ; CDECL ; externe 'Example.dll' ; \u00e9tait r\u00e9sultat : Double ; commencer r\u00e9sultat : = Nombres ( d'abord , 2 ) ; \u00c9crivain ( 'Le r\u00e9sultat est: ' , r\u00e9sultat ) fin . DLLS dans Visual Basic Classic Verwenden [ Modifier | Modifier le texte source ]] De VB \u00e0 la version 6, seule la charge des DLL est prise en charge pendant le trimestre. En plus d’utiliser les fonctions API Library et GetProcaddress Dans Visual Basic, il est \u00e9galement possible de fonctions de DLL externes d\u00e9clarer Ce qui facilite beaucoup plus de travail pour le d\u00e9veloppeur: Option Explicite Sur D\u00e9clarer Fonction Nombres Lib \"Exemple.dll\" ( Bord un Comme Double , Bord b Comme Double ) Comme Double Sous Principal () Faible R\u00e9sultat Comme Double R\u00e9sultat = Nombres ( d'abord , 2 ) D\u00e9boguer . Imprimer \"Le r\u00e9sultat est: \" & R\u00e9sultat Fin Sous Si une erreur se produit lorsque la fonction DLL est factur\u00e9e, VB d\u00e9clenche une erreur d’ex\u00e9cution. Cependant, cela peut \u00eatre intercept\u00e9 et trait\u00e9. De plus, vous devez consid\u00e9rer la convention d’appel de la fonction export\u00e9e: Visual Basic suppose que la fonction est _stdcall. Par cons\u00e9quent, jusqu’\u00e0 VB7, l’importation de fonctions _cDecl n’\u00e9tait possible que via un wrapper-dll interm\u00e9diaire. Utilisez des DLL Win32 dans le framework .NET [ Modifier | Modifier le texte source ]] Dans .NET, les DLL sont int\u00e9gr\u00e9es \u00e0 l’aide de l’attribut Dllimport. Cela n\u00e9cessite l’espace de noms “System.runtime.inter.inter.inter. Le prototype fonctionnel est donn\u00e9 en C # comme “externe”, qui n’est pas n\u00e9cessaire dans VB.NET, alors la fonction peut \u00eatre trait\u00e9e comme les autres: C # [ Modifier | Modifier le texte source ]] en utilisant Syst\u00e8me ; en utilisant System.runtime.interopservices ; espace de noms Exemple de dllimport { classe Programme { [Dllimport (\"example.dll\")] static extern double AddNumbers(double a, double b); static void Main() { Console.WriteLine( AddNumbers( 1, 2 ) ); } }}Vb.net [ Modifier | Modifier le texte source ]] Importations System.runtime.interopservices Classe Programme < Dllimport ( \"Exemple.dll\" ) > _ Priv\u00e9 partag\u00e9 Fonction Nombres ( un Comme Double , b Comme Double ) Comme Double Fin Fonction Priv\u00e9 partag\u00e9 Sous Principal () Console . \u00c9crit ( Nombres ( d'abord , 2 )) End SubEnd ClassInt\u00e9gration directe des DLL dans Visual Studio [ Modifier | Modifier le texte source ]] Cependant, si une DLL doit \u00eatre accessible pour plusieurs m\u00e9thodes ou fonctions, cela peut \u00e9galement \u00eatre directement int\u00e9gr\u00e9 via le projet Visual Studio. [5] Les fonctions de la DLL peuvent ensuite \u00eatre utilis\u00e9es en sp\u00e9cifiant l’espace de noms complet devant la classe de la m\u00e9thode dans le code, soit en int\u00e9grant l’espace de noms directement avec l’utilisation (C #) ou les importations (vb.net). Cette proc\u00e9dure n’a pas besoin de l’espace de noms System.Runtime.InteropServices. Dans l’exemple suivant, l’exemple ci-dessus est illustr\u00e9 d’une DLL directement int\u00e9gr\u00e9e (l’espace de noms correspond au nom de la DLL): C # [ Modifier | Modifier le texte source ]] en utilisant Exemple ; classe Programme { statique annuler Principal () { Console . \u00c9crit ( Nombres ( d'abord , 2 )); } }Vb.net [ Modifier | Modifier le texte source ]] Importations Exemple Classe Programme Priv\u00e9 partag\u00e9 Sous Principal () Console . \u00c9crit ( Nombres ( d'abord , 2 )) Fin Sous Fin Classe Dependency Walker, composant du Microsoft Visual Studio jusqu’\u00e0 la version 2005, avec lesquels vous pouvez avoir des fonctions d’un programme excellent et import\u00e9. \u2191 Qu’est-ce que la biblioth\u00e8que de liens dynamiques (DLL)? – D\u00e9finition de Whatis.com. Consult\u00e9 le 24 mai 2022 . \u2191 Fichier DLL – Qu’est-ce que c’est? Consult\u00e9 le 24 mai 2022 . \u2191 un b K. B. Microsoft: Format d’en-t\u00eate de fichier ex\u00e9cutable \u2191 Deland-Han: Biblioth\u00e8que de liens dynamiques (DLL) – Client Windows. Consult\u00e9 le 24 mai 2022 (Allemand). \u2191 Corob-MSF: Proc\u00e9dure pas \u00e0 pas: cr\u00e9ez et utilisez votre propre biblioth\u00e8que de liens dynamiques (C ++). Consult\u00e9 le 24 mai 2022 (Anglais am\u00e9ricain). (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4"},{"@context":"http:\/\/schema.org\/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/wiki.edu.vn\/all2fr\/wiki1\/#breadcrumbitem","name":"Enzyklop\u00e4die"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/wiki.edu.vn\/all2fr\/wiki1\/bibliotheque-de-liens-dynamiques-wikipedia\/#breadcrumbitem","name":"Biblioth\u00e8que de liens dynamiques – Wikipedia"}}]}]