Share via


EXPORTS

Mise à jour : novembre 2007

Introduit une section qui contient une ou plusieurs definitions représentant des données ou des fonctions exportées. Chaque définition doit se trouver sur une ligne distincte.

EXPORTS
definitions

Notes

Le mot clé EXPORTS peut figurer sur la même ligne que la première définition ou sur une ligne précédente. Le fichier .def peut contenir une ou plusieurs instructions EXPORTS.

La syntaxe des definitions d'exportation est la suivante :

entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]

L'argument entryname est le nom de la fonction ou de la variable à exporter. Cette information est obligatoire. Si le nom que vous exportez est différent de celui qui se trouve dans la DLL, spécifiez le nom de l'exportation dans la DLL à l'aide de l'argument internalname. Par exemple, si votre DLL exporte une fonction func1() et que vous souhaitiez l'utiliser en tant que func2(), vous devez spécifier :

EXPORTS
func2=func1

@ordinal vous permet de spécifier qu'un nombre, et non le nom de la fonction, doit être placé dans la table d'exportation de la DLL. Cela peut vous aider à réduire au maximum la taille de la DLL. Le fichier .LIB contiendra le mappage entre l'ordinal et la fonction, qui vous permet d'employer le nom de la fonction comme vous le feriez normalement dans des projets utilisant la DLL.

Le mot clé facultatif NONAME vous permet d'effectuer une exportation par ordinal uniquement et de réduire la taille de la table d'exportation dans la DLL qui en résulte. Cependant, si vous souhaitez appliquer GetProcAddress à la DLL, vous devez connaître l'ordinal, car le nom ne sera pas valide.

Le mot clé facultatif PRIVATE empêche l'argument entryname d'être placé dans la bibliothèque d'importation générée par LINK. Il n'a aucun effet sur l'exportation dans l'image générée également par LINK.

Le mot clé facultatif DATA spécifie qu'une exportation correspond à des données, et non à du code. Par exemple, vous pouvez exporter une variable de données de la façon suivante :

EXPORTS
i DATA

Lorsque vous utilisez PRIVATE et DATA pour la même exportation, PRIVATE doit précéder DATA.

Il existe trois méthodes d'exportation d'une définition, présentées dans l'ordre recommandé pour leur utilisation :

  1. le mot clé __declspec(dllexport) dans le code source ;

  2. une instruction EXPORTS dans un fichier .def ;

  3. une spécification /EXPORT dans une commande LINK.

Les trois méthodes peuvent être utilisées dans le même programme. Quand LINK génère un programme contenant des exportations, il crée également une bibliothèque d'importation, sauf si un fichier .exp est utilisé lors de la génération.

Voici un exemple de section EXPORTS :

EXPORTS
   DllCanUnloadNow      @1     PRIVATE   DATA
   DllWindowName = Name        DATA
   DllGetClassObject    @4 NONAME   PRIVATE
   DllRegisterServer    @7
   DllUnregisterServer

Notez que lorsque vous exportez une variable à partir d'une DLL à l'aide d'un fichier .def, il n'est pas nécessaire de spécifier __declspec(dllexport) sur la variable. Cependant, dans un fichier utilisant la DLL, vous devez quand même vous servir de __declspec(dllimport) dans la déclaration des données.

Voir aussi

Référence

Règles s'appliquant aux instructions de définition de module