Compartir a través de


Acerca de las bibliotecas de Dynamic-Link

La vinculación dinámica permite a un módulo incluir solo la información necesaria para buscar una función DLL exportada en tiempo de carga o tiempo de ejecución. La vinculación dinámica difiere de la vinculación estática más conocida, en la que el enlazador copia el código de una función de biblioteca en cada módulo que lo llama.

Tipos de vinculación dinámica

Hay dos métodos para llamar a una función en un archivo DLL:

  • En la vinculación dinámica en tiempo de carga, un módulo realiza llamadas explícitas a funciones DLL exportadas como si fueran funciones locales. Esto requiere que vincule el módulo con la biblioteca de importación para el archivo DLL que contiene las funciones. Una biblioteca de importación proporciona al sistema la información necesaria para cargar el archivo DLL y buscar las funciones DLL exportadas cuando se carga la aplicación.
  • En la vinculación dinámica en tiempo de ejecución, un módulo usa la función LoadLibrary o LoadLibraryEx para cargar el archivo DLL en tiempo de ejecución. Una vez cargado el archivo DLL, el módulo llama a la función GetProcAddress para obtener las direcciones de las funciones DLL exportadas. El módulo llama a las funciones DLL exportadas mediante los punteros de función devueltos por GetProcAddress. Esto elimina la necesidad de una biblioteca de importación.

Archivos DLL y administración de memoria

Cada proceso que carga el archivo DLL lo asigna a su espacio de direcciones virtual. Una vez que el proceso carga el archivo DLL en su dirección virtual, puede llamar a las funciones DLL exportadas.

El sistema mantiene un recuento de referencias por proceso para cada DLL. Cuando un subproceso carga el archivo DLL, el recuento de referencias se incrementa en uno. Cuando el proceso finaliza o cuando el recuento de referencias se convierte en cero (solo la vinculación dinámica en tiempo de ejecución), el archivo DLL se descarga desde el espacio de direcciones virtual del proceso.

Al igual que cualquier otra función, una función DLL exportada se ejecuta en el contexto del subproceso que lo llama. Por lo tanto, se aplican las condiciones siguientes:

  • Los subprocesos del proceso que llamó al archivo DLL pueden usar identificadores abiertos por una función DLL. Del mismo modo, los identificadores abiertos por cualquier subproceso del proceso de llamada se pueden usar en la función DLL.
  • El archivo DLL usa la pila del subproceso que realiza la llamada y el espacio de direcciones virtuales del proceso de llamada.
  • El archivo DLL asigna memoria desde el espacio de direcciones virtuales del proceso de llamada.

Para obtener más información sobre los archivos DLL, consulte los temas siguientes: