Partager via


Importation et exportation

Vous pouvez importer des symboles publics dans une application ou exporter des fonctions à partir d’une DLL à l’aide de deux méthodes :

  • Utiliser un fichier de définition de module (.def) lors de la génération de la DLL

  • Utiliser les 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 de module qui décrivent différents attributs d’une DLL. Si vous n’utilisez __declspec(dllimport) pas ou __declspec(dllexport) n’exportez pas les fonctions d’une DLL, la DLL nécessite un fichier .def.

Vous pouvez utiliser des fichiers .def pour importer dans une application ou pour exporter à partir d’une DLL.

Utilisation de __declspec

Vous n’avez pas besoin d’utiliser __declspec(dllimport) votre code pour compiler correctement, mais cela permet au compilateur de générer un meilleur code. Le compilateur est en mesure de générer un meilleur code, car il peut déterminer si une fonction existe dans une DLL ou non, ce qui permet au compilateur de produire du code qui ignore un niveau d’indirection qui serait normalement présent dans un appel de fonction qui a franchi une limite DLL. Toutefois, vous devez utiliser __declspec(dllimport) pour importer des variables utilisées dans une DLL.

Avec la section EXPORT du fichier .def appropriée, __declspec(dllexport) n’est pas nécessaire. __declspec(dllexport) a été ajouté pour fournir un moyen simple d’exporter des fonctions à partir d’un fichier .exe ou .dll sans utiliser de fichier .def.

Le format Exécutable portable Win32 est conçu pour réduire le nombre de pages qui doivent être touchées pour corriger les importations. Pour ce faire, il place toutes les adresses d’importation pour n’importe quel programme dans un emplacement appelé table d’adresses d’importation. Cela permet au chargeur de modifier une ou deux pages seulement lors de l’accès à ces importations.

Que voulez-vous faire ?

Voir aussi

Création de DLL C/C++ dans Visual Studio