Exportation à partir d'une DLL à l'aide de fichiers DEFExporting from a DLL Using DEF Files

Une définition de module ou d’un fichier DEF (*.def) est un fichier texte contenant une ou plusieurs instructions du module décrivant divers attributs d’une DLL.A module-definition or DEF file (*.def) is a text file containing one or more module statements that describe various attributes of a DLL. Si vous n’utilisez pas le __declspec (dllexport) mot clé pour exporter des fonctions de la DLL, la DLL exige un fichier DEF.If you are not using the __declspec(dllexport) keyword to export the DLL's functions, the DLL requires a DEF file.

Un fichier DEF minimal doit contenir les instructions de définition de module suivantes :A minimal DEF file must contain the following module-definition statements:

  • La première instruction dans le fichier doit être l’instruction LIBRARY.The first statement in the file must be the LIBRARY statement. Cette instruction identifie le fichier DEF comme appartenant à une DLL.This statement identifies the DEF file as belonging to a DLL. L’instruction LIBRARY est suivie du nom de la DLL.The LIBRARY statement is followed by the name of the DLL. L’éditeur de liens place ce nom dans la bibliothèque d’importation de la DLL.The linker places this name in the DLL's import library.

  • L’instruction EXPORTS répertorie les noms et, éventuellement, des valeurs ordinales des fonctions exportées par la DLL.The EXPORTS statement lists the names and, optionally, the ordinal values of the functions exported by the DLL. Vous affectez à la fonction une valeur ordinale en suivant le nom de la fonction avec un arobase (@) et un nombre.You assign the function an ordinal value by following the function's name with an at sign (@) and a number. Lorsque vous spécifiez des valeurs ordinales, ils doivent être dans la plage 1 à N, où N est le nombre de fonctions exportées par la DLL.When you specify ordinal values, they must be in the range 1 through N, where N is the number of functions exported by the DLL. Si vous souhaitez exporter des fonctions par ordinal, consultez exportation de fonctions à partir d’une DLL par Ordinal plutôt que par nom , ainsi que de cette rubrique.If you want to export functions by ordinal, see Exporting Functions from a DLL by Ordinal Rather Than by Name as well as this topic.

Par exemple, une DLL qui contient le code pour implémenter un arbre de recherche binaire peut se présenter comme suit :For example, a DLL that contains the code to implement a binary search tree might look like the following:

LIBRARY   BTREE
EXPORTS
   Insert   @1
   Delete   @2
   Member   @3
   Min   @4

Si vous utilisez le Assistant DLL MFC pour créer une DLL MFC, l’Assistant crée un squelette de fichier DEF et l’ajoute automatiquement à votre projet.If you use the MFC DLL Wizard to create an MFC DLL, the wizard creates a skeleton DEF file for you and automatically adds it to your project. Ajoutez les noms des fonctions à exporter dans ce fichier.Add the names of the functions to be exported to this file. Pour les DLL non - MFC, créer le fichier DEF vous-même et ajoutez-le à votre projet.For non-MFC DLLs, create the DEF file yourself and add it to your project. Accédez ensuite à projet > propriétés > l’éditeur de liens > entrée > Fichier de définition de module et entrez le nom du fichier DEF.Then go to Project > Properties > Linker > Input > Module Definition File and enter the name of the DEF file. Répétez cette étape pour chaque plateforme et de configuration, ou procédez à la fois en sélectionnant Configuration = toutes les Configurations, et Platform = toutes les plateformes.Repeat this step for each configuration and platform, or do it all at once by selecting Configuration = All Configurations, and Platform = All Platforms.

Si vous exportez des fonctions dans un fichier C++, vous devez placer les noms décorés dans le fichier DEF soit définir les fonctions exportées avec une liaison C standard en utilisant extern « C ».If you are exporting functions in a C++ file, you have to either place the decorated names in the DEF file or define your exported functions with standard C linkage by using extern "C". Si vous devez placer les noms décorés dans le fichier DEF, vous pouvez les obtenir à l’aide de la DUMPBIN d’outils ou en utilisant l’éditeur de liens /mapper option.If you need to place the decorated names in the DEF file, you can obtain them by using the DUMPBIN tool or by using the linker /MAP option. Notez que les noms décorés produits par le compilateur sont spécifiques du compilateur.Note that the decorated names produced by the compiler are compiler specific. Si vous placez les noms décorés produits par Microsoft C++ compilateur (MSVC) dans un fichier DEF, les applications qui sont liées à votre DLL doivent également être créées à l’aide de la même version de MSVC afin que les noms décorés dans l’application appelante correspondent aux noms exportés dans fichier DEF de la DLL.If you place the decorated names produced by the Microsoft C++ compiler (MSVC) into a DEF file, applications that link to your DLL must also be built using the same version of MSVC so that the decorated names in the calling application match the exported names in the DLL's DEF file.

Notes

Une DLL générée avec Visual Studio 2015 peut être utilisée par les applications créées avec Visual Studio 2017 ou Visual Studio 2019.A DLL built with Visual Studio 2015 can be consumed by applications built with Visual Studio 2017 or Visual Studio 2019.

Si vous générez un DLL d’extension, et l’exportation à l’aide d’un fichier DEF, placez le code suivant au début et fin des fichiers d’en-tête contenant les classes exportées :If you are building an extension DLL, and exporting using a DEF file, place the following code at the beginning and end of your header files that contain the exported classes:

#undef AFX_DATA
#define AFX_DATA AFX_EXT_DATA
// <body of your header file>
#undef AFX_DATA
#define AFX_DATA

Ces lignes garantissent que les variables MFC utilisées en interne ou qui sont ajoutés à vos classes sont exportées (ou importées) à partir de votre DLL d’extension MFC.These lines ensure that MFC variables that are used internally or that are added to your classes are exported (or imported) from your MFC extension DLL. Par exemple, lorsque vous dérivez une classe à l’aide DECLARE_DYNAMIC, la macro se développe pour ajouter un CRuntimeClass variable membre à votre classe.For example, when deriving a class using DECLARE_DYNAMIC, the macro expands to add a CRuntimeClass member variable to your class. Si vous omettez ces quatre lignes risque d’être compilée ou liée de manière incorrecte ou provoquer une erreur lors de l’application cliente établit un lien vers la DLL.Leaving out these four lines might cause your DLL to compile or link incorrectly or cause an error when the client application links to the DLL.

Lorsque vous générez la DLL, l’éditeur de liens utilise le fichier DEF pour créer un fichier d’exportation (.exp) et un fichier de bibliothèque (.lib) d’importation.When building the DLL, the linker uses the DEF file to create an export (.exp) file and an import library (.lib) file. L’éditeur de liens utilise ensuite le fichier d’exportation pour générer le fichier DLL.The linker then uses the export file to build the DLL file. Exécutables liés de manière implicite à la liaison DLL à la bibliothèque d’importation lorsqu’elles sont générées.Executables that implicitly link to the DLL link to the import library when they are built.

Notez que MFC elle-même utilise des fichiers DEF pour exporter des fonctions et des classes à partir de MFCx0.dll.Note that MFC itself uses DEF files to export functions and classes from the MFCx0.dll.

Que voulez-vous faire ?What do you want to do?

Sur quels éléments souhaitez-vous obtenir des informations supplémentaires ?What do you want to know more about?

Voir aussiSee also

Exportation à partir d’une DLLExporting from a DLL