Importation et exportation
Mise à jour : novembre 2007
Vous pouvez importer des symboles publics dans une application ou exporter des fonctions à partir d'une DLL à l'aide de deux méthodes :
Utilisation d'un fichier de définition de module (.def) lors de la génération de la DLL
Utilisation des mots clés __declspec(dllimport) ou __declspec(dllexport) dans une définition de fonction dans l'application principale
Utilisation d'un fichier .def
Un fichier de définition de module (.def) est un fichier texte contenant une ou plusieurs instructions du module décrivant divers attributs d'une DLL. Si vous n'utilisez ni __declspec(dllimport) ni __declspec(dllexport) pour exporter des fonctions d'une DLL, la DLL exige un fichier .def.
Vous pouvez utiliser des fichiers .def pour importer dans une application ou exporter à partir d'une DLL.
Utilisation de __declspec
Visual C++ utilise __declspec(dllimport) et __declspec(dllexport) pour remplacer le mot clé __export utilisé précédemment dans les versions 16 bits de Visual C++.
Vous n'avez pas besoin d'utiliser __declspec(dllimport) pour que le code se compile correctement, mais en l'utilisant vous permettez au compilateur de générer un code de meilleure qualité. Le compilateur est en mesure de générer un code de meilleure qualité, car il peut déterminer si une fonction existe ou non dans une DLL ; il peut donc produire un code qui saute un niveau d'adressage indirect qui serait normalement présent dans un appel de fonction ayant dépassé la limite d'une DLL. Cependant, vous devez utiliser __declspec(dllimport) afin d'importer des variables utilisées dans une DLL.
Avec la section EXPORTS appropriée du fichier .def, __declspec(dllexport) n'est pas nécessaire. __declspec(dllexport) a été ajouté pour mettre en œuvre un moyen pratique d'exportation de fonctions à partir d'un fichier .exe ou .dll sans utiliser un fichier .def.
Le format d'exécutable portable (PE, Portable Executable) Win32 est conçu pour réduire le nombre de pages qu'il faut retoucher pour réparer les importations. Pour ce faire, il place toutes les adresses d'importation d'un programme dans un emplacement unique appelé Table des adresses d'importation. Le chargeur peut ainsi modifier une ou deux pages seulement lors de l'accès à ces importations.