Importar datos mediante __declspec(dllimport)

En el caso de los datos, es conveniente utilizar __declspec(dllimport) para quitar un nivel de direccionamiento indirecto. Cuando importe datos desde un archivo DLL, aún tendrá que recorrer la tabla de direcciones de importación. Antes de que existiera __declspec(dllimport), esto significaba que tenía que acordarse de realizar un nivel de direccionamiento indirecto adicional al obtener acceso a datos exportados desde el archivo DLL:

// 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

A continuación, se exportarían los datos del archivo .DEF:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

y tendría acceso a los mismos fuera del archivo DLL:

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

Ahora, cuando marca los datos como __declspec(dllimport), el compilador genera automáticamente el código de direccionamiento indirecto. Ya no se tiene que preocupar de realizar los pasos anteriores. Como se indicó anteriormente, no debe utilizar la declaración __declspec(dllimport) en los datos al compilar el archivo DLL. Las funciones del archivo DLL no utilizan la tabla de direcciones de importación para obtener acceso al objeto de datos; por lo tanto, no estará presente el nivel adicional de direccionamiento indirecto.

Para exportar los datos automáticamente desde el archivo DLL, utilice la siguiente dirección:

__declspec(dllexport) ULONG ulDataInDLL;

Vea también

Conceptos

Importar a una aplicación