Bibliothèque de liens dynamiques – Wikipedia

before-content-x4

Bibliothèque de liens dynamiques
Extension de fichier: .dll, .dll
Type mime: application / vnd.microsoft.portable-exécutable,
application / x-msdownload,
application / trace d’octet
Développé par: Microsoft
Art: bibliothèque dynamique

Bibliothèque de liens dynamiques (du Anglais emprunté; court Dll ) désigne généralement une bibliothèque de programmes dynamiques; Cependant, le terme fait généralement référence à la variante utilisée pour les systèmes d’exploitation Windows et OS / 2. [d’abord] [2]

after-content-x4

Les fichiers DLL utilisent également le format de fichier utilisé pour les fichiers EXE exécutables, qui dans les programmes 16 bits le nouveau format exécutable (NE), [3] Dans les programmes 16 et 32 ​​bits, le format existable linéaire (LE ou LX, OS / 2) ainsi que dans les programmes 32 et 64 bits sont le format exécutable portable (PE, Windows). Ces fichiers peuvent contenir du code de programme (code machine), des données et des ressources dans n’importe quelle combinaison.

L’extension de fichier Windows pour ces bibliothèques est généralement Dll . De plus, cependant, d’autres fichiers se terminaient Cpl (pour le contrôle du contrôle), OCX (pour les bibliothèques avec des contrôles ActiveX) ou aussi DRV (pour les conducteurs).

L’objectif principal des fichiers DLL est de réduire l’espace de stockage requis par les applications sur le disque dur et dans la mémoire principale. Le code et les données qui pourraient être nécessaires par plus d’une application sont donc enregistrés dans un seul fichier sur le disque dur et ne sont chargés que dans la mémoire principale une fois si plusieurs programmes ont besoin de la même bibliothèque de programmes. [4]

Table of Contents

Avantages supplémentaires [ Modifier | Modifier le texte source ]]

Si un code de programme est amélioré, tous les programmes qui utilisent ce code doivent être modifiés, mais il suffit de le mettre à jour dans la DLL. Dans ce cas, tous les programmes peuvent accéder à la version mise à jour. Cela permet aux développeurs de logiciels d’émettre des correctifs relativement petits pour des packages de logiciels plus grands, par exemple pour des systèmes d’exploitation entiers. Un package entier peut être mis à jour en mettant à jour les DLL individuelles.

Sous la forme de plug-ins, les DLL peuvent créer de nouvelles pièces de programme pour un programme existant et y intégrer de manière transparente sans avoir à modifier les programmes existants. Cette idée de «l’intégration» dynamique est réalisée par ActiveX, par exemple sous Windows.

Une telle structure modulaire ne peut pas être facilement désactivée.

after-content-x4

faiblesses [ Modifier | Modifier le texte source ]]

Un problème mentionné dans Windows se produit également lorsque plusieurs applications nécessitent différentes versions de la même DLL. Si la version requise n’a pas de programme, cela peut entraîner des problèmes tels que des installations incorrectes. Ce conflit peut souvent être corrigé en copie la version correcte de la bibliothèque de programmes dans le dossier du programme du programme respectif. Cependant, l’effet des économies de mémoire est à nouveau détruit. Avec Microsoft .NET, il est possible d’éviter les conflits de version sur les fichiers DLL en permettant l’existence simultanée de plusieurs versions d’une bibliothèque de programmes. Cependant, cela n’est possible que pour les fichiers DLL développés avec .NET.

Dans certains cas, le détournement de DLL ou l’utilisation maligne de l’injection de DLL est possible.

Télécharger les DLL dans un programme de programme [ Modifier | Modifier le texte source ]]

Si un programme doit être exécuté, il est chargé dans la mémoire par le chargeur du système 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éros de commande des commandes DLL requises par ce programme. Le chargeur invite désormais les DLL manquantes dans la mémoire et ajoute le Table d’importation du programme Les adresses d’entrée des commandes individuelles.

Structure de fichiers DLL [ Modifier | Modifier le texte source ]]

Une DLL a (selon l’en-tête MZ) la même en-tête NE, LE ou PE comme fichier exécutable normal, uniquement en cas de drapeau DWORD à l’adresse 0c est hexagonal dans l’en-tête NE à 8000 hexagonal SET (Flag des modules de bibliothèque) [3] ou dans l’en-tête PE Im Caractéristiques -Value que Image_file_dll -T set. Tandis que les DLL et les fichiers exécutables ont un Exportation Ceci est rarement utilisé dans ce dernier. Dans cette “table d’exportation”, tous les noms des fonctions et variables sont répertoriés, que la DLL fournit avec un logiciel externe. Ces noms doivent être triés par ordre alphabétique pour que le chargeur puisse les trouver.

Appeler une commande DLL par un programme [ Modifier | Modifier le texte source ]]

Tout d’abord, les valeurs à transférer à d’autres sous-programmes sont stockées sur la pile, puis un saut indirect est effectué à la valeur de l’adresse DLL stockée par le chargeur dans le tableau d’importation.

DLLS dans la mémoire [ Modifier | Modifier le texte source ]]

Il existe deux variantes différentes de la façon dont les DLL peuvent être chargées dans la mémoire à partir du système d’exploitation. Il y a des DLL statiques qui ne sont chargées qu’une seule fois. Tous les programmes accèdent ensuite à cette seule instance de la DLL. Cette DLL n’a alors qu’une seule zone de mémoire globale. Les DLL Windows-Kernel sont des DLL statiques, ce qui leur permet de gérer l’ensemble du système (par exemple, surveillant tous les fichiers ouverts).
Pour gérer une autre variante de DLL dans la mémoire, c’est que, chaque fois qu’un nouveau programme a besoin d’une DLL, une nouvelle instance est chargée dans la mémoire par elle.

Un autre drapeau de l’en-tête DLL détermine si une DLL est statique ou non.

Compteur d’instance de dll [ Modifier | Modifier le texte source ]]

Chaque fois qu’une DLL est chargée par un programme, un compteur d’instance interne pour cette DLL est augmenté. Le système peut reconnaître ce compteur si une DLL est toujours utilisée ou peut être déchargée. Ce dernier se produit lorsque le compteur d’instance atteint zéro car le dernier programme en cours d’exécution que la DLL a utilisé, que DLL a déchargé et il n’a pas à être conservé dans la mémoire.

Travailler avec les DLL dans Visual C ++ [ Modifier | Modifier le texte source ]]

Création d’une DLL avec une fonction [ Modifier | Modifier le texte source ]]

L’interface DLL est utilisée à l’aide de la fonction d’exportation __DeclsSpec (Dllexport) Sont définis.
Ceci est démontré 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éfini (_msc_ver)   #inclure    #define dll extern "c" __declspec (dllexport)  #autre   #define dll  #fin si  // La fonction qui doit être mise à 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ée un lors de la compilation Dll ainsi qu’un Lib -Déposer.

Intetting une DLL et appeler cette fonction [ Modifier | Modifier le texte source ]]

Les fonctions DLL peuvent simplement être appelées après vous __DeclsSpec (dllimport) importé.

#inclure   #inclure   // importe la fonction de la DLL créée ci-dessus  externe  "C"  __declspec ( dllimport )  double  Nombres  ( double  un ,  double  b )  ;  int  principal  ( annuler )  {   // appelle la fonction externe   double  résultat  =  Nombres  ( d'abord ,  2 )  ;   printf  ( "Le résultat est:% f n " ,  résultat )  ;      return 0 ;
}

Il convient de noter que celle de gauche a besoin du fichier Lib et que le fichier DLL doit être dans le même 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ées plus tard de la DLL.

Intetting une DLL au terme et appeler cette fonction [ Modifier | Modifier le texte source ]]

Les bibliothèques DLL peuvent être chargées en une seule application de deux manières différentes: soit lorsque le programme est démarré (comme décrit dans les exemples ci-dessus) ou seulement plus tard pendant le terme par les fonctions de l’API Library , GetProcaddress et Freelibrary utilisé. La façon dont les DLL doivent être intégrées pendant le terme est la même dans chaque langage de programmation tant que vous souhaitez importer une fonction API Windows. Le code suivant le démontre en utilisant des exemples de VC ++:

#inclure   #inclure   // Définition du type de fonction DLL, qui doit être utilisée  typedef  double  ( * BinaryFunction_T )  ( double ,  double )  ;  int  principal  ( annuler )  {   BinaryFunction_T  Nombres  ;   double  résultat  ;      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 être dans un dossier accessible au programme.

Il convient également de noter que lorsque vous essayez d’avoir une DLL non existante directement chargée directement lorsque vous démarrez le programme, un message d’erreur s’affiche à partir du système d’exploitation et le programme se termine sans que le programmeur n’ait un moyen d’intercepter cette erreur. Cependant, lors de l’intégration des DLL pendant le terme, les erreurs de chargement peuvent être interceptées.

Utilisez des DLL dans l’objet Pascal [ Modifier | Modifier le texte source ]]

Créer une DLL [ Modifier | Modifier le texte source ]]

Le mot-clé doit être dans la tête du code source bibliothèque au lieu de programme être utilisé. À la fin du fichier, les fonctions à exporter sont alors exportations -Area répertoriée:

 bibliothèque  Exemple ;  // La fonction qui doit être mise à la disposition d'autres programmes  // (dans cet exemple: ajouter deux nombres)  fonction  Nombres ( un ,  b :  Double ) :  Double ;  CDECL ;  commencer  Résultat  : =  un  +  b ;  fin ;  // exporter la fonction  exportations  Nombres ;  // Dans ce cas, aucun code source d'initialisation spécial ne doit être spécifié  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égrer une DLL uniquement le mot-clé externe être utilisé:

 programme  Exemple ;  {$ Apptype Console}  // importe la fonction à partir d'une DLL externe  fonction  Nombres ( un ,  b :  Double ) :  Double ;  CDECL ;  externe  'Example.dll' ;  était  résultat :  Double ;  commencer  résultat  : =  Nombres ( d'abord ,  2 ) ;  Écrivain ( 'Le résultat est: ' ,  résultat )  fin .  

DLLS dans Visual Basic Classic Verwenden [ Modifier | Modifier le texte source ]]

De VB à 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 également possible de fonctions de DLL externes déclarer Ce qui facilite beaucoup plus de travail pour le développeur:

 Option  Explicite  Sur   Déclarer  Fonction  Nombres  Lib  "Exemple.dll"  ( Bord  un  Comme  Double ,  Bord  b  Comme  Double )  Comme  Double   Sous  Principal ()   Faible  Résultat  Comme  Double   Résultat  =  Nombres ( d'abord ,  2 )   Déboguer . Imprimer  "Le résultat est: "  &  Résultat   Fin  Sous  

Si une erreur se produit lorsque la fonction DLL est facturée, VB déclenche une erreur d’exécution. Cependant, cela peut être intercepté et traité. De plus, vous devez considérer la convention d’appel de la fonction exportée: Visual Basic suppose que la fonction est _stdcall. Par conséquent, jusqu’à VB7, l’importation de fonctions _cDecl n’était possible que via un wrapper-dll intermédiaire.

Utilisez des DLL Win32 dans le framework .NET [ Modifier | Modifier le texte source ]]

Dans .NET, les DLL sont intégrées à l’aide de l’attribut Dllimport. Cela nécessite l’espace de noms “System.runtime.inter.inter.inter. Le prototype fonctionnel est donné en C # comme “externe”, qui n’est pas nécessaire dans VB.NET, alors la fonction peut être traitée comme les autres:

C # [ Modifier | Modifier le texte source ]]

en utilisant  Système ;  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é  partagé  Fonction  Nombres ( un  Comme  Double ,  b  Comme  Double )  Comme  Double   Fin  Fonction   Privé  partagé  Sous  Principal ()   Console . Écrit ( Nombres ( d'abord ,  2 ))    End Sub
End Class

Intégration directe des DLL dans Visual Studio [ Modifier | Modifier le texte source ]]

Cependant, si une DLL doit être accessible pour plusieurs méthodes ou fonctions, cela peut également être directement intégré via le projet Visual Studio. [5] Les fonctions de la DLL peuvent ensuite être utilisées en spécifiant l’espace de noms complet devant la classe de la méthode dans le code, soit en intégrant l’espace de noms directement avec l’utilisation (C #) ou les importations (vb.net). Cette procédure n’a pas besoin de l’espace de noms System.Runtime.InteropServices.

Dans l’exemple suivant, l’exemple ci-dessus est illustré d’une DLL directement intégrée (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 . Écrit ( Nombres ( d'abord ,  2 ));   }  }
Vb.net [ Modifier | Modifier le texte source ]]
Importations  Exemple  Classe  Programme   Privé  partagé  Sous  Principal ()   Console . Écrit ( Nombres ( d'abord ,  2 ))   Fin  Sous  Fin  Classe  
  • Dependency Walker, composant du Microsoft Visual Studio jusqu’à la version 2005, avec lesquels vous pouvez avoir des fonctions d’un programme excellent et importé.
  1. Qu’est-ce que la bibliothèque de liens dynamiques (DLL)? – Définition de Whatis.com. Consulté le 24 mai 2022 .
  2. Fichier DLL – Qu’est-ce que c’est? Consulté le 24 mai 2022 .
  3. un b K. B. Microsoft: Format d’en-tête de fichier exécutable
  4. Deland-Han: Bibliothèque de liens dynamiques (DLL) – Client Windows. Consulté le 24 mai 2022 (Allemand).
  5. Corob-MSF: Procédure pas à pas: créez et utilisez votre propre bibliothèque de liens dynamiques (C ++). Consulté le 24 mai 2022 (Anglais américain).
after-content-x4