Tecnología

Inicio

Cómo obtener un prototipo de función en la DLL

Cómo obtener un prototipo de función en la 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. Mientras el programa en ejecución no hace referencia a una función DLL, el DLL no tiene que ocupar espacio. Esto ahorra recursos y aumenta el rendimiento en tiempo de ejecución. Si la biblioteca eran estáticas, todo el código de la biblioteca se adjunta 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 de objetos compartidos que se construye con la extensión SO. Windows, Unix y Linux tienen convenios específicos para acceder a funciones de DLL o bibliotecas compartidas.

Instrucciones

Objetos de exportación DLL de Windows Uso de preprocesador de palabras clave

1 En el archivo DLL de cabeza, poner la palabra clave "__declspec (dllexport)" antes de que el prototipo de una variable de función, clase, clase o miembro de datos en el archivo DLL. Esta palabra clave se suma el prototipo de la función de tabla de exportación de la DLL.

2 Utilice valores ordinales 1 a N en lugar de nombres de función o miembro de clase para conservar el espacio ocupado por la tabla de exportación de la DLL, donde N es el número de objetos o funciones de la DLL.

3 Añadir la palabra clave "__declspec (dllimport)" antes de que los prototipos de las funciones correspondientes en el programa de llamada o DLL. El programa de llamada importa las funciones que las exportaciones DLL.

Funciones de exportación DLL de Windows utilizando un archivo de definición del módulo

4 Crear un archivo de texto con la extensión DEF y añadirlo al proyecto para su DLL en Visual Studio.

5 Añada la sentencia "biblioteca" con el nombre de la DLL después de la siguiente manera:

BIBLIOTECA ReportWriter

6 Opcionalmente añadir una corta descripción de línea para la DLL de la siguiente manera:

DESCRIPCIÓN Este es un archivo DLL para la funcionalidad de generación de informes en MyProduct.

Esto se recomienda.

7 Añadir una entrada para cada miembro de la función o clase que el DLL quiere exportar, con un número cardinal opcional. El número cardinal representa la función y toma valores de 1 a N, donde N es el número de funciones exportadas por el DLL. Aquí hay un ejemplo:

RPT_init @ 1
RPT_design @ 2
RPT_run @ 3
RPT_print @ 4

Después de la vinculación de todas las fuentes y este archivo DEF, el compilador crea un archivo de exportación con la extensión de CAD y un archivo de biblioteca de importación, con la extensión LIB. El compilador utiliza el archivo de CAD para crear la DLL. El archivo LIB está vinculada al programa de llamada y mantiene la información de importación sobre las funciones de la DLL.

Consejos y advertencias

  • Para llamar a funciones C en un archivo DLL desde un programa de C o C ++, encapsular los prototipos de las funciones exportadas en el "extern C {....}" directiva de preprocesador de la siguiente manera:
  • #ifdef __cplusplus
  • extern "C" {
  • #terminara si
  • __declspec (dllimport) RPT_init void (* RPT informe);
  • __declspec (dllimport) BOOL RPT_design (RPT * informe);
  • __declspec (dllimport) BOOL RPT_run (RPT * informe);
  • __declspec (dllimport) BOOL RPT_print (RPT * informe);
  • #ifdef __cplusplus
  • } // Soporte final de la directiva de preprocesador "extern C"
  • #terminara si
  • Cuando un archivo DLL está hecha de clases derivadas de Microsoft Foundation Classes en forma de DLL, el nuevo archivo DLL se llama una extensión DLL de MFC. Utilice la macro "AFX_EXT_CLASS" para exportación e importación prototipos de ramos en el MFC DLL prolongados.
  • Para trasladar las aplicaciones Windows de 16 bits y 32 bits de Windows, vuelva a colocar la palabra clave "_export" y "_import" con "__declspec (dllexport)" y "__declspec (dllimport)", respectivamente.