“Conocimientos Programación>C /C + + Programming

Dinámica Llamar a funciones en archivos DLL

2015/2/17
Una librería de enlace dinámico o DLL , permite a una aplicación cargar sólo el código ejecutable mínimo necesario en la memoria en tiempo de ejecución . Cada vez que el programa llama a una función en una DLL, el sistema operativo carga la DLL en la memoria , de acuerdo con las especificaciones del programador . Mientras el programa en ejecución no hace referencia a una función de DLL , DLL que no necesita ocupar un espacio . Esto ahorra una gran cantidad de recursos y aumenta el rendimiento en tiempo de ejecución . Si la biblioteca no son estáticas , todo el código de la biblioteca sería anexado al código ejecutable del programa principal y el programa gigante tendría que permanecer en la memoria de todo el tiempo de ejecución. La versión de Unix o Linux de una DLL de Windows es una biblioteca compartida , construida de acuerdo con la extensión " . Así . " Windows , Unix y Linux tienen convenios específicos para acceder a funciones de DLL o bibliotecas compartidas . Exportar objetos de Windows DLL Uso dllexport Keyword

Para hacer una función , clase, dato o función miembro de la clase a disposición del programa de Windows que llama, debe exportarlo primero . Una clase o función pueden ser exportados en su definición a través del " __declspec ( dllexport ) " de palabras clave antes del nombre de la función , clase o variable , de la siguiente manera :

Void __ declspec ( dllexport ) MyClass : cObjectName pública { ..... }

En el archivo de encabezado DLL, puso esta palabra clave antes de que el nombre de la función en una declaración prototipo. El " __declspec ( dllexport ) " palabra clave almacena los nombres de las funciones de la tabla de exportación del archivo DLL. Para economizar el espacio que ocupa esta tabla , utilice números ordinales en lugar de los nombres de función .
Exportación Objetos Windows DLL través del módulo de archivos de definición de

Como alternativa a la palabra clave " __declspec ( dllexport ) , "crear un archivo de definición de módulo que establece el nombre de la biblioteca , una descripción opcional y se enumeran los nombres de funciones, clases y variables de datos en el archivo DLL con 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 la DLL . El archivo de definición de módulo tiene la extensión que sigue es un ejemplo de un archivo de definición de módulo, o un archivo DEF " DEF . ". : .

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

Si crea un archivo DLL Microsoft Foundation Class utilizando el Asistente para aplicaciones de Visual Studio, el asistente generará un archivo de esqueleto. DEF para el DLL y agregarlo al proyecto. Agregue entradas para las funciones de DLL en el archivo . DEF para exportarlos . El formato del prototipo de función que utiliza el programa de llamada 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 compilador específico , las definiciones de ambos lugares constantemente .
Importación y Exportación de extensión DLL

Microsoft generado por el compilador Foundation Class extensión DLL normalmente se compone de clases reutilizables derivadas de los tipos de clases de MFC existentes. Están construidos con una versión DLL de MFC , y pueden ser llamados desde las aplicaciones y DLLs creadas con 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 la clase como esta: Clase CMyViewClass AFX_EXT_CLASS : CView público { /cuerpo /clase} ; Si utiliza un archivo DEF , agregue el siguiente código de macro en el principio. y al final del archivo de cabecera DLL extendido: # undef AFX_DATA # define AFX_DATA AFX_EXT_DATA // extendida # undef AFX_DATA # define AFX_DATA

Estas directivas de preprocesador asegurarse de que las variables de MFC y derivaciones y exportados de la DLL extendida.
Importación funciones DLL

la otra cara de exportar objetos de DLLs que está importando en las aplicaciones que utilizan el " __declspec ( dllimport ) " palabras clave .
exportación C Funciones para el uso en C o C + + ejecutables

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

He aquí un ejemplo ://MyDLLFunctions.h # ifdef __ cplusplusExtern "C " {# endif__declspec ( dllimport ) MyFunc01 void (); __declspec ( dllimport ) void MyFunc02 (); # ifdef __ cplusplus } /soportes /end para " extern C" directiva # endif

Como alternativa a la especificación de la " extern C " directiva dentro de la cabecera DLL, que puede incluir el archivo de cabecera DLL con una " extern" C " " contenedor condicional , de la siguiente manera :

# ifdef __ cplusplusExtern "C " {# endif

# include " DLLPath \\ MyDLLFunctions.h "

# ifdef __ cplusplus } //fin de soportes para " extern C" directiva # endif

C /C + + Programming
Cómo declarar una variable estática en C
Cómo determinar si una fecha es válida en un programa de C
Cómo calcular los círculos de intersección de C + +
Cómo utilizar ASM en Visual C
Cómo escribir un programa en C para las conversiones métricas
Cómo utilizar los puertos COM en Visual C
¿Cómo hacer una raíz cuadrada en C + +
Cómo leer un archivo CBZ
Conocimientos Informáticos © http://www.ordenador.online