Tecnología

Inicio

Funciones de llamadas dinámicas DLL

Funciones de llamadas dinámicas DLL


Una librería de enlace dinámico o DLL, permite a una aplicación única para cargar el código ejecutable en la memoria mínima necesaria en tiempo de ejecución. Cada vez que el programa llama a una función en un archivo DLL, el sistema operativo carga el archivo DLL en la memoria, de acuerdo con las especificaciones del programador. Siempre que el programa en ejecución no hace referencia a una función de DLL, que DLL no tiene que ocupa espacio. Esto ahorra una gran cantidad de recursos y aumenta el rendimiento en tiempo de ejecución. Si la biblioteca eran estáticas, todo el código de la biblioteca, se añadiría al código ejecutable del programa principal y el programa de gigante tendría que permanecer en la memoria para todo el tiempo de ejecución. La versión Unix o Linux de un archivo DLL de Windows es una biblioteca compartida, construida en consecuencia con la extensión ".so". Windows, Unix y Linux tienen convenios específicos para acceder a funciones de DLL o bibliotecas compartidas.

Exportación de Windows DLL de objetos utilizando palabras clave dllexport

Para hacer una función de función, clase, elemento de datos o miembro de la clase accesible para el programa de Windows llamada, deberá exportarlo primero. Una clase o función pueden ser exportados durante su definición usando la palabra clave "__declspec (dllexport)" antes de la función, la clase o nombre de la variable, como sigue:

declspec void (dllexport) MiClase: CObjectName pública {... ..}

En el archivo DLL de cabeza, puso esta palabra clave antes de que el nombre de función en una declaración prototipo. El "__declspec (dllexport)" palabra clave almacena los nombres de las funciones de la tabla de exportación de la DLL. Para economizar el espacio que ocupa esta tabla, utilice números ordinales en lugar de nombres de función.

Exportación de Windows DLL de objetos a través del módulo de archivos de definición

Como alternativa a la palabra clave "__declspec (dllexport)," crear un archivo de definición de módulo que establece el nombre de biblioteca, una descripción opcional y enumera los nombres de funciones, clases y variables de datos en el archivo DLL junto con los valores ordinales opcionales. El valor ordinal de una función varía de 1 a N donde N es el número de funciones en el DLL. El archivo de definición de módulo tiene la ".def." Extensión siguiente es un ejemplo de un archivo de definición de módulos, o un archivo .def:

BIBLIOTECA ReportWriter
DESCRIPCIÓN Esta biblioteca dinámica contiene la funcionalidad del generador de informes MyProduct.
RPT_setup @ 1
RPT_design @ 2
RPT_run @ 3
RPT_print @ 4

Si crea un archivo DLL Microsoft Foundation Class utilizando el Asistente para aplicaciones de Visual Studio, el asistente generará un archivo .def esqueleto para la DLL y añadirlo al proyecto. Añadir entradas para las funciones de DLL en este archivo .def para exportarlos. El formato del prototipo de la función utilizada por el programa llamante debe coincidir con el formato de las entradas de función en el archivo .def. O bien utilizar las definiciones simples en ambos lugares, o las definiciones, generados por el compilador específicas del compilador en ambos lugares constantemente.

Importación y Exportación de extensión DLL

Un DLL de extensión de Microsoft Foundation Class normalmente se compone de clases reutilizables derivados de tipos de clase MFC existentes. Se construyen utilizando una versión de DLL de MFC, y pueden ser llamadas desde las aplicaciones y archivos DLL construidas usando esta versión compartida de MFC. Para exportar clases en archivos DLL de extensión, utilice la macro "AFX_EXT_CLASS" antes del nombre de clase como esta:
Clase AFX_EXT_CLASS CMyViewClass: CView pública
{
// Cuerpo de la clase
};
Si está utilizando un archivo .def, añada el siguiente código de macro al principio y al final del archivo DLL encabezado extendido:

undef AFX_DATAdefine AFX_DATA AFX_EXT_DATA

// <Cuerpo del archivo de cabecera para la DLL de extensión>

undef AFX_DATAdefine AFX_DATA

Estas directivas del preprocesador asegurarse de que las variables y las derivaciones y exportada desde el archivo DLL de MFC extendida.

Importación de funciones DLL

La otra cara de objetos exportadores de ellas es la importación de DLL en aplicaciones que utilizan el "__declspec (dllimport)" palabra clave.

Funciones de exportación C para su uso en ejecutables C o C ++

Si el programa o función que llama está escrito en C ++, utilice la directiva de preprocesador "extern C" en la cabecera del archivo DLL si las funciones DLL están escritas en C.

Aquí hay un ejemplo:
// MyDLLFunctions.h

ifdef __cplusplus

Extern "C" {

terminara si

declspec (dllimport) MyFunc01 void ();
declspec (dllimport) MyFunc02 void ();

ifdef __cplusplus

} // etiquetas de cierre para la directiva "extern C"

terminara si

Como alternativa a la especificación de la directiva "Externo C" dentro de la cabecera DLL, puede incluir el archivo de cabecera con una DLL C "" Externo "En" envoltorio en forma condicional, de la siguiente manera:

ifdef __cplusplus

Extern "C" {

endifinclude "DLLPath \ MyDLLFunctions.h" ifdef __cplusplus

} // etiquetas de cierre para la directiva "extern C"

terminara si