EXPORTS
Durch diese Anweisung wird ein Abschnitt mit einer oder mehreren definitions eingeleitet, bei denen es sich um exportierte Funktionen oder Daten handelt. Jede Definition muss in einer eigenen Zeile stehen.
EXPORTS
definitions
Hinweise
Das EXPORTS-Schlüsselwort kann sich in derselben Zeile wie die erste Definition oder in einer eigenen, vorangestellten Zeile befinden. Die DEF-Datei kann eine oder mehrere EXPORTS-Anweisungen enthalten.
Die Syntax für eine Exportdefinition lautet:
entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]
entryname steht für die Funktion oder den Variablennamen, die bzw. der exportiert werden soll. Diese Angabe ist erforderlich. Falls der exportierte Name von dem in der DLL abweicht, geben Sie den Exportnamen in der DLL mithilfe von internalname an. Wenn durch die DLL beispielsweise die Funktion func1() exportiert wird und diese Funktion als func2() verwendet werden soll, geben Sie Folgendes an:
EXPORTS
func2=func1
Mithilfe von @ordinal können Sie festlegen, dass anstelle des Funktionsnamens eine Zahl in die DLL-Exporttabelle aufgenommen wird. Auf diese Weise kann die Größe der DLL verringert werden. Die Zuordnung zwischen Ordnungszahl und Funktion ist in der LIB-Datei enthalten. Auf diese Weise können Sie den Funktionsnamen genauso verwenden wie in Projekten, die die DLL nutzen.
Das optionale NONAME-Schlüsselwort bietet die Möglichkeit, ausschließlich auf der Grundlage von Ordnungszahlen zu exportieren, sodass die Größe der Exporttabelle in der resultierenden DLL verringert werden kann. Wenn Sie jedoch GetProcAddress für die DLL verwenden möchten, müssen Sie die Ordnungszahl kennen, da der Name nicht gültig ist.
Das optionale PRIVATE-Schlüsselwort verhindert, dass der entryname in der von LINK erstellten Importbibliothek gespeichert wird. Es hat keine Auswirkung auf den Export in die Abbilddatei, die ebenfalls von LINK erstellt wird.
Mit dem optionalen DATA-Schlüsselwort wird angegeben, dass ein Export datenbezogen und nicht codebezogen ist. Sie könnten eine Datenvariable beispielsweise wie folgt exportieren:
EXPORTS
i DATA
Falls PRIVATE und DATA im selben Exportvorgang verwendet werden, muss PRIVATE vor DATA angegeben werden.
Es gibt drei Methoden zum Exportieren einer Definition. Sie sind in der Reihenfolge aufgeführt, in der sie verwendet werden sollten:
Das __declspec(dllexport)-Schlüsselwort im Quellcode
Eine EXPORTS-Anweisung in einer DEF-Datei
Eine /EXPORT-Spezifikation in einem LINK-Befehl
Es ist möglich, alle drei Methoden im selben Programm einzusetzen. Wenn LINK ein Programm erstellt, das Exporte enthält, wird auch eine Importbibliothek erstellt, es sei denn, bei der Erstellung wird eine EXP-Datei verwendet.
Im Folgenden sehen Sie ein Beispiel für einen EXPORTS-Abschnitt:
EXPORTS
DllCanUnloadNow @1 PRIVATE DATA
DllWindowName = Name DATA
DllGetClassObject @4 NONAME PRIVATE
DllRegisterServer @7
DllUnregisterServer
Beachten Sie, dass __declspec(dllexport) nicht für die Variable angegeben werden muss, wenn Sie eine Variable mithilfe einer DEF-Datei aus einer DLL exportieren. In allen Dateien, die die DLL verwenden, muss jedoch weiterhin __declspec(dllimport) bei der Deklaration von Daten verwendet werden.