Creación de la biblioteca de vínculos dinámicos
Para crear una biblioteca de vínculos dinámicos (DLL), debe crear uno o varios archivos de código fuente y, posiblemente, un archivo vinculador para exportar las funciones. Si tiene previsto permitir que las aplicaciones que usan la DLL usen la vinculación dinámica en tiempo de carga, también debe crear una biblioteca de importación.
Creación de archivos de origen
Los archivos de origen de una DLL contienen funciones y datos exportados, funciones y datos internos, y una función de punto de entrada opcional para la DLL. Puede usar cualquier herramienta de desarrollo que admita la creación de DLL basadas en Windows.
Si una aplicación multiproceso puede usar la DLL, debe hacer que la DLL sea segura para subprocesos. Para evitar daños en los datos, debe sincronizar el acceso a todos los datos globales de la DLL. También debe asegurarse de que solo vincule con bibliotecas que también sean seguras para subprocesos. Por ejemplo, Microsoft Visual C++ contiene varias versiones de la biblioteca de ejecución de C, una que no es segura para subprocesos y dos que sí lo son.
Exportación de funciones
La forma de especificar qué funciones de una DLL se deben exportar depende de las herramientas que se usan para el desarrollo. Algunos compiladores permiten exportar una función directamente en el código fuente mediante un modificador en la declaración de función. En otras ocasiones, debe especificar exportaciones en un archivo que pase al enlazador.
Por ejemplo, con Visual C++, hay dos maneras posibles de exportar funciones de DLL: con el modificador __declspec(dllexport) o con un archivo de definición de módulo (.def
). Si usa el modificador __declspec(dllexport), no es necesario usar un archivo .def
. Para obtener más información, consulte Exportar desde una DLL.
Creación de una biblioteca de importación
Un archivo de biblioteca de importación (.lib
) contiene información que el enlazador necesita para resolver referencias externas a funciones de DLL exportadas, de modo que el sistema pueda localizar la DLL especificada y las funciones de DLL exportadas en tiempo de ejecución. Puede crear una biblioteca de importación para la DLL al compilar la DLL.
Para obtener más información, consulte Creación de una biblioteca de importación y exportación de archivos.
Uso de una biblioteca de importación
Por ejemplo, para llamar a la función CreateWindow, debe vincular el código con la biblioteca de importación User32.lib
. El motivo es que CreateWindow reside en una DLL del sistema denominada User32.dll
, y User32.lib
es la biblioteca de importación que se usa para resolver las llamadas en el código para exportar funciones en User32.dll
. El enlazador crea una tabla que contiene la dirección de cada llamada de función. Las llamadas a funciones de una DLL se corregirán cuando se cargue la DLL. Mientras el sistema inicializa el proceso, se carga User32.dll
porque el proceso depende de las funciones exportadas de esa DLL y actualiza las entradas de la tabla de direcciones de función. Todas las llamadas a CreateWindow invocan la función exportada desde User32.dll
.
Para obtener más información, consulte Vincular un archivo ejecutable a una DLL.