Freigeben über


Importieren von Daten mit __declspec(dllimport)

Bei Daten ist __declspec(dllimport) ein praktisches Element, das eine Dereferenzierungsstufe entfernt. Wenn Sie Daten aus einer DLL importieren, müssen Sie immer noch die Importadresstabelle durchlaufen. Vor __declspec(dllimport) bedeutete dies, dass beim Zugriff auf Daten, die aus der DLL exportiert wurden, eine zusätzliche Dereferenzierungsstufe erforderlich war:

// project.h
// Define PROJECT_EXPORTS when building your DLL
#ifdef PROJECT_EXPORTS   // If accessing the data from inside the DLL
   ULONG ulDataInDll;

#else         // If accessing the data from outside the DLL
   ULONG *ulDataInDll;
#endif

Anschließend exportieren Sie die Daten in Ihrer DEF-Datei:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

und greifen außerhalb der DLL auf sie zu:

if (*ulDataInDll == 0L)
{
   // Do stuff here
}

Wenn Sie die Daten als __declspec(dllimport) markieren, generiert der Compiler automatisch den Dereferenzierungscode für Sie. Sie müssen sich keine Gedanken mehr über die oben beschriebenen Schritte machen. Wie bereits erwähnt, sollten Sie bei der Erstellung der DLL die __declspec(dllimport)-Deklaration nicht für die Daten verwenden. Funktionen innerhalb der DLL verwenden nicht die Importadresstabelle für den Zugriff auf das Datenobjekt, und daher verfügen Sie nicht über die zusätzliche Dereferenzierungsstufe.

Um die Daten automatisch aus der DLL zu exportieren, verwenden Sie die folgende Deklaration:

// project.h
// Define PROJECT_EXPORTS when building your DLL
#ifdef PROJECT_EXPORTS   // If accessing the data from inside the DLL
   __declspec(dllexport) ULONG ulDataInDLL;

#else         // If accessing the data from outside the DLL
   __declspec(dllimport) ULONG ulDataInDLL;
#endif

Siehe auch

Importieren in eine Anwendung