Frage

Ich bin nur eine einfache, prägnante Erklärung des Unterschieds zwischen diesen beiden. MSDN geht nicht in eine Hölle von vielen Detail hier.

War es hilfreich?

Lösung

  • __declspec(dllexport) teilt den Linker mit, dass Sie diese Aufgabe wollen für andere DLL zur Verfügung zu importieren. Es wird verwendet, wenn eine DLL erstellen, die anderen verlinken zu können.

  • __declspec(dllimport) importiert die Implementierung aus einer DLL, damit Ihre Anwendung sie verwenden kann.

Ich bin nur ein Anfänger C / C ++ Entwickler, so vielleicht jemand bekam eine bessere Erklärung als ich.

Andere Tipps

__declspec( dllexport ) -. Die Klasse oder Funktion, so wird aus der DLL exportiert markiert werden sie eingebaut ist Wenn Sie eine DLL Gebäude sind und Sie eine API wollen, müssen Sie diese oder eine separate DEF-Datei, die definiert, verwenden, die Exporte ( MSDN ). Das ist praktisch, weil es die Definition in einem Ort hält, aber die DEF-Datei bietet mehr Optionen.

__declspec( dllimport ) - Die Klasse oder Funktion, so wird aus einer DLL importiert markiert werden. Dies ist nicht wirklich erforderlich ist - Sie brauchen eine Importbibliothek sowieso der Linker glücklich zu machen. Aber wenn sie richtig mit dllimport markiert, der Compiler und Linker haben genügend Informationen, um den Anruf zu optimieren; ohne sie, erhalten Sie normale statische Verknüpfung mit einer Stummel Funktion in der Importbibliothek, die unnötige indirection hinzufügt. ONT1 ONT2

Zwei verschiedene Anwendungsfälle:

1) Sie definieren eine Klasse Implementierung innerhalb einer DLL. Sie wollen ein anderes Programm die Klasse verwenden. Hier können Sie verwenden Dllexport wie Sie eine Klasse erstellen, die Sie die dll wollen aussetzen.

2) Sie verwenden eine Funktion durch eine DLL zur Verfügung gestellt. Sie umfassen einen Header mit dem DLL geliefert. Hier wird der Header verwendet Dllimport bei der Umsetzung zu bringen, indem das aktuelle Programm verwendet werden.

Oft ist die gleiche Header-Datei ist in beiden Fällen und ein Makro definiert verwendet. Die Build-Konfiguration definiert die Makro Import oder Export werden je nachdem, welche es braucht.

Dllexport wird verwendet, um eine Funktion zu markieren, wie exportiert. Sie implementieren die Funktion in der DLL und exportieren es so es jedem mit Ihrer DLL verfügbar wird.

Dllimport ist das Gegenteil: es markiert eine Funktion als aus einer DLL importiert. In diesem Fall erklären Sie nur die Unterschrift der Funktion und verknüpfen Sie Ihren Code mit der Bibliothek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top