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;