Importieren von Daten mithilfe von "__declspec(dllimport)"
Aktualisiert: November 2007
Im Fall von Daten bietet die Verwendung von __declspec(dllimport) eine bequeme Möglichkeit, eine Ebene von Zeigeroperationen zu umgehen. Wenn Sie Daten aus einer DLL importieren, müssen Sie noch die Importadressentabelle durchlaufen. Vor __declspec(dllimport) hatte dies zur Folge, dass beim Zugriff auf die aus der DLL exportierten Daten eine zusätzliche Ebene von Zeigeroperationen implementiert werden musste:
// project.h
#ifdef _DLL // If accessing the data from inside the DLL
ULONG ulDataInDll;
#else // If accessing the data from outside the DLL
ULONG *ulDataInDll;
#endif
Anschließend wurden die Daten aus der DEF-Datei exportiert:
// project.def
LIBRARY project
EXPORTS
ulDataInDll CONSTANT
Der Zugriff fand außerhalb der DLL statt:
if (*ulDataInDll == 0L)
{
// Do stuff here
}
Wenn Sie die Daten mit __declspec(dllimport) kennzeichnen, wird der Code für Zeigeroperationen automatisch vom Compiler generiert. Die oben genannten Schritte entfallen einfach. Wie bereits erwähnt, sollten Sie keine __declspec(dllimport)-Deklaration für Daten verwenden, während die DLL erstellt wird. Die Funktionen innerhalb der DLL verwenden keine Importadressentabelle für den Zugriff auf das Datenobjekt. Es ist also keine zusätzliche Ebene von Zeigeroperationen vorhanden.
Um die Daten automatisch aus der DLL zu exportieren, verwenden Sie die folgende Deklaration:
__declspec(dllexport) ULONG ulDataInDLL;