Importar y exportar
Puede importar símbolos públicos en una aplicación o exportar funciones de un archivo DLL con dos métodos:
Mediante el uso de un archivo de definición de módulos (.def) al compilar el archivo DLL.
Usar las palabras clave
__declspec(dllimport)
o__declspec(dllexport)
en una definición de función de la aplicación principal
Uso de un archivo .def
Un archivo de definición de módulos (.def) es un archivo de texto que contiene una o varias instrucciones de módulo que describen varios atributos de un archivo DLL. Si no usa __declspec(dllimport)
ni __declspec(dllexport)
para exportar las funciones de un archivo DLL, la DLL requiere un archivo .def.
Puede usar archivos .def para importar en una aplicación o exportar de un archivo DLL.
Uso de __declspec
No es necesario que use __declspec(dllimport)
para que el código se compile correctamente, pero, en caso de que lo haga, el compilador generará mejor código. El compilador podrá generar un código de mayor calidad porque puede determinar si una función existe en un archivo DLL, lo que permite al compilador generar código que omite un nivel de direccionamiento indirecto que normalmente estaría presente en una llamada de función que haya cruzado un límite de DLL. Sin embargo, debe usar __declspec(dllimport)
para importar las variables usadas en un archivo DLL.
Con la sección EXPORTS del archivo .def adecuado, no es necesario __declspec(dllexport)
. __declspec(dllexport)
se ha agregado para proporcionar una manera sencilla de exportar funciones de un archivo .exe o .dll sin necesidad de usar un archivo .def.
El formato de archivo portable ejecutable de Win32 está diseñado para minimizar el número de páginas que se deben tocar para corregir las importaciones. Para ello, coloca todas las direcciones de importación de cualquier programa en un lugar denominado "tabla de direcciones de importación". Esto permite que el cargador modifique solo una o dos páginas al acceder a estas importaciones.