Importieren und Exportieren
Es gibt zwei Methoden zum Importieren von öffentlichen Symbolen in eine Anwendung bzw. zum Exportieren von Funktionen aus einer DLL:
Verwenden einer Moduldefinitionsdatei (.def) beim Erstellen der DLL
Verwenden der Schlüsselwörter __declspec(dllimport) oder __declspec(dllexport) in einer Funktionsdefinition der Hauptanwendung
Verwenden einer DEF-Datei
Eine Moduldefinitionsdatei (.def) ist eine Textdatei mit einer oder mehreren Modulanweisungen, die verschiedene Attribute einer DLL beschreiben. Wenn Sie zum Exportieren von DLL-Funktionen nicht __declspec(dllimport) oder __declspec(dllexport) verwenden, ist eine DEF-Datei für die DLL erforderlich.
DEF-Dateien ermöglichen das Importieren in eine Anwendung bzw. das Exportieren aus einer DLL.
Verwenden von "__declspec"
In Visual C++ ersetzen __declspec(dllimport) und __declspec(dllexport) das __export-Schlüsselwort, das zuvor in den 16-Bit-Versionen von Visual C++ verwendet wurde.
__declspec(dllimport) muss nicht unbedingt eingesetzt werden, um einen einwandfreien Code zu kompilieren, es bietet jedoch die Möglichkeit, die Codegenerierung durch den Compiler zu optimieren. Der Compiler kann besseren Code generieren, da er feststellen kann, ob eine Funktion in einer DLL vorhanden ist oder nicht. Beim vom Compiler generierten Code kann daher eine Ebene von Dereferenzierungen übersprungen werden, die normalerweise in einem Funktionsaufruf über die Grenze einer DLL hinaus vorhanden wäre. Um die in einer DLL verwendeten Variablen zu importieren, muss allerdings __declspec(dllimport) verwendet werden.
Mit dem geeigneten EXPORTS-Abschnitt in der DEF-Datei ist __declspec(dllexport) nicht erforderlich. __declspec(dllexport) wurde als einfache Möglichkeit zum Exportieren von Funktionen aus einer EXE- oder DLL-Datei ohne Verwendung einer DEF-Datei hinzugefügt.
Das Win32-Format für übertragbare, ausführbare Dateien wurde entworfen, um die Anzahl der für die Korrektur von Importen verarbeiteten Seiten zu minimieren. Zu diesem Zweck werden alle Importadressen für Programme an einem Ort zusammengefasst, der als Importadressentabelle bezeichnet wird. Dadurch muss das Ladeprogramm lediglich eine oder zwei Seiten ändern, wenn es auf diese Importe zugreift.