Compartir a través de


Crear y utilizar una biblioteca de vínculos dinámicos (C++)

Actualización: noviembre 2007

El primer tipo de biblioteca que crearemos es una biblioteca de vínculos dinámicos (DLL). El uso de archivos DLL es una buena manera de reutilizar el código. En lugar de volver a implementar las mismas rutinas en todos los programas que cree, escríbalas una vez y haga referencia a ellas desde las aplicaciones que necesiten esa funcionalidad.

En este tutorial se trata lo siguiente:

  • Crear un nuevo proyecto de biblioteca de vínculos dinámicos (DLL)

  • Agregar una clase a la biblioteca de vínculos dinámicos.

  • Crear una aplicación que haga referencia a la biblioteca de vínculos dinámicos.

  • Utilizar la funcionalidad de la biblioteca de clases en la aplicación de consola.

  • Ejecutar la aplicación.

Requisitos previos

En este tema se da por supuesto que conoce los fundamentos del lenguaje C++. Si está empezando a aprender C++, le recomendamos el libro "C++ Beginner's Guide" escrito por Herb Schildt, disponible en línea en https://go.microsoft.com/fwlink/?LinkId=115303.

Para crear un nuevo proyecto de biblioteca de vínculos dinámicos (DLL)

  1. En el menú Archivo, haga clic en Nuevo y, a continuación, en Proyecto….

  2. En el panel Tipos de proyecto, en Visual C++, seleccione Win32.

  3. En el panel Plantillas, seleccione Aplicación de consola Win32.

  4. Elija un nombre para el proyecto, como MathFuncsDll, y escríbalo en el campo Nombre. Elija un nombre para la solución, como DynamicLibrary, y escríbalo en el campo Nombre de la solución.

  5. Haga clic en Aceptar para iniciar el asistente para aplicaciones Win32. En la página Información general del cuadro de diálogo Asistente para aplicaciones Win32, haga clic en Siguiente.

  6. En la página Configuración de la aplicación del Asistente para aplicaciones Win32, en Tipo de aplicación, seleccione DLL si está disponible o Aplicación de consola si DLL no está disponible. Algunas versiones de Visual Studio no admiten la creación de un proyecto de archivo DLL mediante asistentes. Puede cambiar esto posteriormente para que el proyecto se compile en un archivo DLL.

  7. En la página Configuración de la aplicación del Asistente para aplicaciones Win32, en Opciones adicionales, seleccione Proyecto vacío.

  8. Haga clic en Finalizar para crear el proyecto.

Para agregar una clase a la biblioteca de vínculos dinámicos

  1. Para crear un archivo de encabezado para una nueva clase, en el menú Proyecto, seleccione Agregar nuevo elemento.... Aparece el cuadro de diálogo Agregar nuevo elemento. En el panel Categorías, bajo Visual C++, seleccione Código. En el panel Plantillas, seleccione Archivo de encabezado (.h). Elija un nombre para el archivo de encabezado, como MathFuncsDll.h, y haga clic en Agregar. Se mostrará un archivo vacío.

  2. Agregue una clase simple denominada MyMathFuncs para hacer operaciones matemáticas comunes, como suma, resta, multiplicación y división. El código debe tener una apariencia similar a la siguiente:

    // MathFuncsDll.h
    
    namespace MathFuncs
    {
        class MyMathFuncs
        {
        public:
            // Returns a + b
            static __declspec(dllexport) double Add(double a, double b);
    
            // Returns a - b
            static __declspec(dllexport) double Subtract(double a, double b);
    
            // Returns a * b
            static __declspec(dllexport) double Multiply(double a, double b);
    
            // Returns a / b
            // Throws DivideByZeroException if b is 0
            static __declspec(dllexport) double Divide(double a, double b);
        };
    }
    
  3. Tenga en cuenta el modificador __declspec(dllexport) en las declaraciones de método de este código. Estos modificadores permiten que el archivo DLL exporte el método para que pueda ser utilizado por otras aplicaciones. Para obtener más información, vea dllexport, dllimport.

  4. Para crear un archivo de código fuente para una nueva clase, en el menú Proyecto, seleccione Agregar nuevo elemento.... Aparece el cuadro de diálogo Agregar nuevo elemento. En el panel Categorías, bajo Visual C++, seleccione Código. En el panel Plantillas, seleccione Archivo C++ (.cpp). Elija un nombre para el archivo de código fuente, como MathFuncsDll.cpp, y haga clic en Agregar. Se mostrará un archivo vacío.

  5. Implemente la funcionalidad para MyMathFuncs en el archivo de código fuente. El código debe tener una apariencia similar a la siguiente:

    // MathFuncsDll.cpp
    // compile with: /EHsc /LD
    
    #include "MathFuncsDll.h"
    
    #include <stdexcept>
    
    using namespace std;
    
    namespace MathFuncs
    {
        double MyMathFuncs::Add(double a, double b)
        {
            return a + b;
        }
    
        double MyMathFuncs::Subtract(double a, double b)
        {
            return a - b;
        }
    
        double MyMathFuncs::Multiply(double a, double b)
        {
            return a * b;
        }
    
        double MyMathFuncs::Divide(double a, double b)
        {
            if (b == 0)
            {
                throw new invalid_argument("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    
  6. Para generar el proyecto en un archivo DLL, en el menú Proyecto, seleccione Propiedades… de MathFuncsDll. En el panel izquierdo, en Propiedades de configuración, seleccione General. En el panel derecho, cambie el Tipo de configuración a Biblioteca dinámica (.dll). Haga clic en Aceptar para guardar los cambios.

    Nota:

    Si está generando un proyecto desde la línea de comandos, utilice la opción del compilador /LD para especificar que el archivo de resultados debería ser un archivo DLL. Para obtener más información, vea /MD, /MT, /LD (Utilizar la biblioteca en tiempo de ejecución).

  7. Compile la biblioteca de vínculos dinámicos seleccionando Generar solución en el menú Generar. Esto crea un archivo DLL que puede ser utilizado por otros programas. Para obtener más información sobre DLLs, vea Archivos DLL.

Para crear una aplicación que haga referencia a la biblioteca de vínculos dinámicos

  1. Para crear una aplicación que haga referencia y utilice la biblioteca de vínculos dinámicos que se acaba de crear, en el menú Archivo, seleccione Nuevo y luego Proyecto….

  2. En el panel Tipos de proyecto, en Visual C++, seleccione Win32.

  3. En el panel Plantillas, seleccione Aplicación de consola Win32.

  4. Elija un nombre para el proyecto, como MyExecRefsDll, y escríbalo en el campo Nombre. Junto a Solución, seleccione Agregar a solución en la lista desplegable. Esto agregará el nuevo proyecto a la misma solución que la biblioteca de vínculos dinámicos.

  5. Haga clic en Aceptar para iniciar el Asistente para aplicaciones Win32. En la página Información general del cuadro de diálogo Asistente para aplicaciones Win32, haga clic en Siguiente.

  6. En la página Configuración de la aplicación del Asistente para aplicaciones Win32, en Tipo de aplicación, seleccione Aplicación de consola.

  7. En la página Configuración de la aplicación del Asistente para aplicaciones Win32, en Opciones adicionales, desactive la casilla Encabezado precompilado.

  8. Haga clic en Finalizar para crear el proyecto.

Para utilizar la funcionalidad de la biblioteca de clases en la aplicación de consola

  1. Después de crear una nueva aplicación de consola, se crea un programa vacío. El nombre del archivo de código fuente será el mismo que el elegido para el proyecto anterior. En este ejemplo, se llama MyExecRefsDll.cpp.

  2. Para utilizar las rutinas matemáticas que se crearon en la biblioteca de vínculos dinámicos, deberá hacer referencia a la biblioteca. Para ello, seleccione Referencias... en el menú Proyecto. En el cuadro de diálogo Páginas de propiedades, expanda el nodo Propiedades comunes, seleccione Referencias y, a continuación, seleccione el botón Agregar nueva referencia.... Para obtener más información sobre el cuadro de diálogo Referencias..., vea Marco de trabajo y referencias, Propiedades comunes, Páginas de propiedades de <nombreDeProyecto> (Cuadro de diálogo).

  3. Aparece el cuadro de diálogo Agregar referencia. Este cuadro de diálogo muestra todas las bibliotecas a las que puede hacer referencia. La ficha Proyecto enumera todos los proyectos de la solución actual y las bibliotecas que contienen. En la ficha Proyectos, seleccione MathFuncsDll. A continuación, haga clic en Aceptar. Para obtener más información sobre el cuadro de diálogo Agregar referencias, vea Agregar referencia (Cuadro de diálogo).

  4. Para hacer referencia a los archivos de encabezado de la biblioteca de vínculos dinámicos, debe modificar la ruta de acceso de los directorios de inclusión. Para ello, en el cuadro de diálogo Páginas de propiedades, expanda el nodo Propiedades de configuración, a continuación el nodo C/C++ y seleccione General. Junto a Directorios de inclusión adicionales, escriba la ruta de acceso a la ubicación del archivo de encabezado MathFuncsDll.h.

  5. La aplicación ejecutable no carga las bibliotecas de vínculos dinámicos hasta el tiempo de ejecución. Debe indicar al sistema dónde buscar MathFuncsDll.dll. Esto se realiza mediante la variable de entorno PATH. Para ello, en el cuadro de diálogo Páginas de propiedades, expanda el nodo Propiedades de configuración y seleccione Depuración. Al lado de Entorno, escriba lo siguiente: PATH=<ruta de acceso del archivo MathFuncsDll.dll>, donde <ruta de acceso del archivo MathFuncsDll.dll > es la ubicación real de MathFuncsDll.dll. Haga clic en Aceptar para guardar todos los cambios.

    Nota:

    Si desea ejecutar la aplicación ejecutable desde la línea de comandos en vez de desde Visual Studio, debe actualizar la variable de entorno PATH manualmente desde la línea de comandos del modo siguiente: set PATH=%PATH%;<ruta de acceso del archivoMathFuncsDll.dll>, donde <ruta de acceso del archivo MathFuncsDll.dll > se reemplaza por la ubicación real de MathFuncsDll.dll.

  6. Ahora puede utilizar la clase MyMathFuncs en esta aplicación. Reemplace el contenido de MyExecRefsDll.cpp por el código siguiente:

    // MyExecRefsDll.cpp
    // compile with: /EHsc /link MathFuncsDll.lib
    
    #include <iostream>
    
    #include "MathFuncsDll.h"
    
    using namespace std;
    
    int main()
    {
        double a = 7.4;
        int b = 99;
    
        cout << "a + b = " <<
            MathFuncs::MyMathFuncs::Add(a, b) << endl;
        cout << "a - b = " <<
            MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
        cout << "a * b = " <<
            MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
        cout << "a / b = " <<
            MathFuncs::MyMathFuncs::Divide(a, b) << endl;
    
        return 0;
    }
    
  7. Genere el ejecutable seleccionando Generar solución en el menú Generar.

Para ejecutar la aplicación

  1. Asegúrese de que MyExecRefsDll está seleccionado como proyecto predeterminado. En el Explorador de soluciones, seleccione MyExecRefsDll y, a continuación, seleccione Establecer como proyecto de inicio en el menú Proyecto.

  2. Para ejecutar el proyecto, seleccione Iniciar sin depurar en el menú Depurar. El resultado debería ser similar a lo siguiente:

    a + b = 106.4
    a - b = -91.6
    a * b = 732.6
    a / b = 0.0747475
    

Pasos siguientes

Anterior:Crear código reutilizable (C++) | Siguiente:Crear y utilizar una biblioteca estática (C++)

Vea también

Tareas

Paseo guiado por Visual C++

Implementar el programa (C++)

Conceptos

Archivos DLL

Otros recursos

Metodologías comunes de programación

Implementación (C++)