2008-09-12 9 views

Antwort

35
  • __declspec(dllexport) teilt dem Linker mit, dass Sie diese Aufgabe wollen. Es wird beim Erstellen einer DLL verwendet, mit der andere verknüpfen 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

7

Zwei verschiedene Anwendungsfälle:

1) Sie definieren eine Klasse Implementierung innerhalb eine DLL. Sie möchten, dass ein anderes Programm die Klasse verwendet. Hier verwenden Sie dllexport, während Sie eine Klasse erstellen, die die DLL bereitstellen soll.

2) Sie verwenden eine Funktion, die von einer DLL bereitgestellt wird. Sie fügen eine Kopfzeile hinzu, die mit der DLL geliefert wird. Hier verwendet der Header dllimport, um die Implementierung einzufügen, die vom aktuellen Programm verwendet werden soll.

Oft wird in beiden Fällen die gleiche Header-Datei verwendet und ein Makro definiert. Die Build-Konfiguration definiert das Makro, das je nach Bedarf importiert oder exportiert werden soll.

8

Dllexport wird verwendet, um eine Funktion als exportiert zu markieren. Sie implementieren die Funktion in Ihrer DLL und exportieren sie, sodass sie für jeden verfügbar ist, der Ihre DLL verwendet.

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

62

__declspec(dllexport) - Die so gekennzeichnete Klasse oder Funktion wird aus der darin enthaltenen DLL exportiert. Wenn Sie eine DLL erstellen und eine API möchten, müssen Sie diese oder eine separate DEF-Datei verwenden definiert die Exporte (MSDN). Dies ist praktisch, da die Definition an einem Ort beibehalten wird, die DEF-Datei jedoch mehr Optionen bietet.

__declspec(dllimport) - Die so gekennzeichnete Klasse oder Funktion wird aus einer DLL importiert. Dies ist nicht wirklich erforderlich - Sie benötigen eine Importbibliothek sowieso, um den Linker glücklich zu machen. Wenn der Compiler und der Linker jedoch ordnungsgemäß mit dllimport markiert sind, verfügen sie über genügend Informationen, um den Aufruf zu optimieren. Ohne es erhalten Sie normale statische Verknüpfung zu einer Stub-Funktion in der Importbibliothek, die unnötige Indirektion hinzufügt. ONT1ONT2

+6

Sehr gute Informationen zu den Folgen der Nichtverwendung von 'dllimport'. – alecov

Verwandte Themen