Compartir a través de


Importación de datos con __declspec(dllimport)

En el caso de los datos, __declspec(dllimport) es un práctico elemento que quita una capa de direccionamiento indirecto. Cuando importe datos desde un archivo DLL, seguirá teniendo que pasar por la tabla de direcciones de importación. Antes de que existiera __declspec(dllimport), esto significaba que debía acordarse de realizar un nivel adicional de direccionamiento indirecto al acceder a los datos exportados desde el archivo DLL:

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

Después, debía exportar los datos al archivo .def:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

Y acceder a ellos fuera del archivo DLL:

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

Cuando los datos se marcan como __declspec(dllimport), el compilador genera automáticamente el código de direccionamiento indirecto. Ya no tiene que encargarse de los pasos anteriores. Como ya se ha indicado, no use la declaración __declspec(dllimport) en los datos al compilar el archivo DLL. Las funciones del archivo DLL no usan la tabla de direcciones de importación para acceder al objeto de datos, por lo que no habrá presente un nivel de direccionamiento indirecto adicional.

Para exportar los datos automáticamente desde el archivo DLL, use esta declaración:

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

Consulte también

Importación a una aplicación