Importieren in eine Anwendung mithilfe von "__declspec(dllimport)"
Wenn ein Programm öffentliche, durch eine DLL definierte Symbole verwendet, wird dieser Vorgang als Importieren bezeichnet. Wenn Sie Headerdateien für Anwendungen erstellen, die für den Erstellungsvorgang Ihre DLLs verwenden, sollten Sie für die Deklarationen der öffentlichen Symbole __declspec(dllimport) verwenden. Das __declspec(dllimport)-Schlüsselwort funktioniert unabhängig davon, ob der Export über DEF-Dateien oder über das __declspec(dllexport)-Schlüsselwort erfolgt.
Um den Code lesbarer zu gestalten, definieren Sie ein Makro für __declspec(dllimport) und verwenden dieses Makro zur Deklaration aller importierten Symbole:
#define DllImport __declspec( dllimport )
DllImport int j;
DllImport void func();
Die Verwendung von __declspec(dllimport) ist bei Funktionsdeklarationen optional, der Compiler generiert jedoch effizienteren Code, wenn Sie dieses Schlüsselwort verwenden. __declspec(dllimport) muss jedoch verwendet werden, damit die importierende ausführbare Datei auf die öffentlichen Datensymbole und Objekte der DLL zugreifen kann. Beachten Sie, dass die Benutzer Ihrer DLL noch eine Verknüpfung mit einer Importbibliothek herstellen müssen.
Sie können dieselbe Headerdatei sowohl für die DLL als auch für die Clientanwendung nutzen. Verwenden Sie zu diesem Zweck ein spezielles Präprozessorsymbol, das angibt, ob die DLL oder die Clientanwendung erstellt wird. Beispiele:
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
class CLASS_DECLSPEC CExampleA : public CObject
{ ... class definition ... };