Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können Funktionen in jedem zwei der Methoden-ein .def oder des - Schlüsselworts __declspec(dllexport) exportieren.Zur Verbesserung zu entscheiden die Methode für die DLL besser ist, sollten Sie folgende Fragen:
Planen Sie, mehr Funktionen später zu exportieren?
Der wird die DLL nur von Anwendungen, die neu erstellen können, oder wird es wird von Anwendungen, die Sie nicht REBUILD-für Beispiel können, Anwendungen verwendet, die von Drittanbietern erstellt werden?
Pro - und - Betrug der Anwendung von .def Dateien
Exportieren von Funktionen in einer DEF-Datei haben Sie Kontrolle der Exportordinalzahlen.Wenn Sie eine exportierte Funktion der DLL hinzufügen, können Sie ihm einen höheren Ordinalwert als jede andere exportierte Funktion zuweisen.Wenn Sie dies tun, müssen Anwendungen, die die implizite Verknüpfung verwenden, nicht mit der Importbibliothek erneut binden, die die neue Funktion enthält.Dies ist sehr nützlich, wenn Sie eine DLL für viele Anwendungen entwerfen, da Sie neue Funktionen hinzufügen und außerdem sicherstellen können, dass sie fortgesetzt wird, um mit Anwendungen ordnungsgemäß funktionieren, die bereits darauf beruhen.Beispielsweise werden die MFC-DLL erstellt, indem DEF-Dateien verwendet.
Ein weiterer Vorteil der Verwendung einer DEF-Datei besteht darin, dass Sie das - Attribut NONAME verwenden können, um eine Funktion zu exportieren.Dadurch wird nur der Ordinalwert in der Exporttabelle der DLL ein.Bei DLLs, das zahlreiche exportierte Funktionen haben, mithilfe des - Attributs NONAME kann die Größe der DLL-Datei reduzieren.Informationen darüber, wie eine Moduldefinitionsanweisung, finden Sie unter Regeln für Moduldefinitionsanweisungen schreibt.Informationen zum Exportieren mit Ordinalzahlen, finden Sie unter Exportieren von Funktionen aus einer DLL über die Ordnungszahl statt über den Namen.
Ein Nachteil bei Verwendung einer DEF-Datei ist, dass, wenn Sie Funktionen in eine C++-Datei exportieren, Sie entweder die ergänzten Namen in die DEF-Datei einfügen oder die exportierten Funktionen definieren müssen, indem Sie extern "C" verwenden, um die Namensergänzung zu vermeiden, die vom Visual C++-Compiler ausgeführt wird.
Wenn Sie einfügen, die ergänzten Namen in die DEF-Datei, erhalten Sie diese, indem Sie das DUMPBIN-Tool verwenden oder die /MAP-Option des Linkers verwenden.Die ergänzten Namen, die vom Compiler erzeugten, compilerspezifisch sind; Wenn Sie daher die ergänzten Namen platzieren, die vom Compiler in eine DEF-Datei erzeugt werden, müssen die Anwendungen, die mit der DLL verknüpft werden, auch erstellt werden, indem die gleiche Version des Compilers damit die ergänzten Namen in der aufrufenden Anwendungs-Abgleichung die exportierten Namen in der DEF-Datei der DLL verwendet.
Gründe für und gegen die Verwendung von "__declspec(dllexport)"
Verwenden __declspec(dllexport) ist nützlich, weil Sie nicht um eine DEF-Datei und können zu kümmern müssen die ergänzten Namen exportierter Funktionen.Allerdings wird die Nützlichkeit dieser Methode des Exportierens durch die Anzahl der verknüpften Anwendungen beschränkt, dass Sie bereit sind neu zu erstellen.Wenn Sie die DLL mit neuen Exporten neu erstellen, müssen Sie die Anwendungen auch neu erstellen, da die ergänzten Namen für exportierte C++-Funktionen sich ändern können, wenn Sie eine andere Version des Compilers verwenden, um diese neu zu erstellen.
Was möchten Sie tun?
Exportieren aus einer DLL mithilfe von __declspec(dllexport)
Exportieren von C++-Funktionen zur Verwendung in ausführbaren C-Dateien
Exportieren von C-Funktionen zur Verwendung in ausführbaren C- oder C++-Dateien
Importieren in eine Anwendung mithilfe von __declspec(dllimport)