Static vs Dynamic Dynamic Link Library Chargement

Une DLL (Dynamic Link Library) agit comme une bibliothèque partagée de fonctions qui peuvent être sollicitées par de nombreuses applications et autres DLL. Delphi vous permet de créer et d'utiliser des DLL afin que vous puissiez appeler ces fonctions à volonté. Cependant, vous devez importer ces routines avant de pouvoir les appeler.

Les fonctions exportées à partir d'une DLL peuvent être importées de deux manières: soit en déclarant une procédure ou une fonction externe (statique), soit en appelant directement des fonctions API spécifiques à la DLL (dynamiques).

Prenons un simple DLL. Ci-dessous se trouve le code pour "circle.dll" d'exporter une fonction, appelée "CircleArea", qui calcule l'aire d'un cercle en utilisant le rayon donné:

Une fois que vous avez le fichier circle.dll, vous pouvez utiliser la fonction "CircleArea" exportée depuis votre application.

Chargement statique

Le moyen le plus simple d'importer une procédure ou une fonction est de le déclarer à l'aide de la directive externe:

Si vous incluez cette déclaration dans la partie interface d'une unité, circle.dll est chargé une fois au démarrage du programme. Tout au long de l'exécution du programme, la fonction CircleArea est disponible pour toutes les unités qui utilisent l'unité où la déclaration ci-dessus est.

Chargement dynamique

Vous pouvez accéder aux routines d'une bibliothèque via des appels directs aux API Win32, notamment LoadLibrary, FreeLibrary, et GetProcAddress. Ces fonctions sont déclarées dans Windows.pas.

Voici comment appeler la fonction CircleArea à l'aide du chargement dynamique:

Lors de l'importation à l'aide du chargement dynamique, la DLL n'est pas chargée jusqu'à l'appel à LoadLibrary. La bibliothèque est déchargée par l'appel à FreeLibrary.

Avec le chargement statique, la DLL est chargée et ses sections d'initialisation s'exécutent avant l'exécution des sections d'initialisation de l'application appelante. Ceci est inversé avec le chargement dynamique.

Si vous utilisez statique ou dynamique?

Voici un aperçu des avantages et des inconvénients du chargement des DLL statiques et dynamiques:

Chargement statique

Avantages:

  • Plus facile pour un développeur débutant; pas d'appels API "moches".
  • Les DLL sont chargées une seule fois, au démarrage du programme.

Les inconvénients: