Création d’une bibliothèque de liens dynamiques
Pour créer une bibliothèque de liens dynamiques (DLL), vous devez créer un ou plusieurs fichiers de code source, et éventuellement un fichier d’éditeur de liens pour l’exportation des fonctions. Si vous envisagez d’autoriser les applications qui utilisent votre DLL à utiliser la liaison dynamique au moment du chargement, vous devez également créer une bibliothèque d’importation.
Création de fichiers sources
Les fichiers sources d’une DLL contiennent des fonctions et des données exportées, des fonctions et des données internes, ainsi qu’une fonction de point d’entrée facultative pour la DLL. Vous pouvez utiliser n’importe quel outil de développement prenant en charge la création de DLL Windows.
Si votre DLL peut être utilisée par une application multithread, vous devez créer votre DLL « thread-safe ». Pour éviter l’altération des données, vous devez synchroniser l’accès à toutes les données globales de la DLL. Vous devez aussi faire en sorte de créer un lien seulement avec des bibliothèques qui sont également thread-safe. Par exemple, Microsoft Visual C++ contient plusieurs versions de la bibliothèque Runtime C, une version qui n’est pas thread-safe et deux qui le sont.
Exportation de fonctions
La façon dont vous spécifiez quelles fonctions d’une DLL doivent être exportées dépend des outils que vous utilisez pour le développement. Certains compilateurs vous permettent d’exporter une fonction directement dans le code source en utilisant un modificateur dans la déclaration de la fonction. D’autres fois, vous devez spécifier les exportations dans un fichier que vous passez à l’éditeur de liens.
Par exemple, avec Visual C++, il existe deux façons d’exporter des fonctions de DLL : avec le modificateur __declspec(dllexport) ou avec un fichier de définition de module (.def
). Si vous utilisez le modificateur __declspec(dllexport), il n’est pas nécessaire d’utiliser un fichier .def
. Pour plus d’informations, consultez Exportation depuis une DLL.
Création d’une bibliothèque d’importation
Un fichier de bibliothèque d’importation (.lib
) contient des informations dont l’éditeur de liens a besoin pour résoudre les références externes à des fonctions DLL exportées, pour que le système puisse localiser la DLL spécifiée et les fonctions DLL exportées au moment de l’exécution. Vous pouvez créer une bibliothèque d’importation pour votre DLL quand vous générez votre DLL.
Pour plus d’informations, consultez Génération d’une bibliothèque d’importation et d’un fichier d’exportation.
Utilisation d’une bibliothèque d’importation
Par exemple, pour appeler la fonction CreateWindow, vous devez lier votre code à la bibliothèque d’importation User32.lib
. La raison en est que CreateWindow se trouve dans une DLL système nommée User32.dll
, et User32.lib
est la bibliothèque d’importation utilisée pour résoudre les appels de votre code à des fonctions exportées dans User32.dll
. L’éditeur de liens crée une table qui contient l’adresse de chaque appel de fonction. Les appels à des fonctions d’une DLL seront résolus lors du chargement de la DLL. Alors que le système initialise le processus, il charge User32.dll
, car le processus dépend de fonctions exportées dans cette DLL, et il met à jour les entrées dans la table d’adresses de la fonction. Tous les appels à CreateWindow appellent la fonction exportée de User32.dll
.
Pour plus d’informations, consultez Lier un exécutable à une DLL.