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

Este tutorial paso a paso muestra cómo crear una biblioteca de vínculos dinámicos (DLL) para el uso con aplicaciones de c++.Mediante una biblioteca es una buena manera de reutilizar el código.En lugar de re- implementar las mismas rutinas en todos los programas que cree, escríbalas una vez y después haga referencia a ellas desde las aplicaciones que requieren la funcionalidad.Colocar código en un archivo DLL, se guarda el espacio en cada aplicación que haga referencia a él, y puede actualizar el archivo DLL sin volver a compilar todas las aplicaciones.Para obtener más información sobre DLLs, vea Archivos DLL de Visual C++.

Este tutorial trata estas tareas:

  • Crear un proyecto DLL.

  • Agregar una clase al archivo DLL.

  • Crear una aplicación de consola que utiliza la vinculación dinámica de carga- Tiempo para hacer referencia al archivo DLL.

  • Utilizar la funcionalidad de la clase en la aplicación.

  • Ejecutar la aplicación.

Este tutorial crea un archivo DLL que se puede llamar a de las aplicaciones que utilizan las convenciones de llamada de C++.Para obtener información sobre cómo crear archivos DLL para el uso con otros lenguajes, vea Llamar a funciones de un archivo DLL desde aplicaciones programadas en Visual Basic.

Requisitos previos

En este tema, se da por supuesto que conoce los fundamentos del lenguaje C++.

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

  1. En la barra de menú, elija Archivo, Nuevo, Proyecto.

  2. En el panel izquierdo del cuadro de diálogo nuevo proyecto, expanda Instalado, Plantillas, Visual C++, y win32 seleccione.

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

  4. Especifique un nombre para proyecto-para el ejemplo, MathFuncsDll-en el cuadro Nombre.Especifique un nombre para solución- para el ejemplo, DynamicLibrary- en el cuadro Nombre de la solución.elija el botón de Aceptar .

  5. En la página Información general del cuadro de diálogo Asistente para aplicaciones Win32, elija el botón siguiente.

  6. En la página Configuración de la aplicación, en Tipo de aplicación, seleccione dll.

  7. Elija el botón 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 la barra de menú, elija proyecto, agregar nuevo elemento.En el cuadro de diálogo agregar nuevo elemento, en el panel izquierdo, en Visual C++, seleccione código.En el panel central, seleccione Archivo de encabezado (.h).Especifique un nombre para el encabezado archivo (el archivo para el ejemplo, MathFuncsDll.h-and elija el botón Add.Se muestra un archivo de encabezado en blanco.

  2. Agregue el código siguiente al principio del archivo de encabezado:

    // MathFuncsDll.h
    
    #ifdef MATHFUNCSDLL_EXPORTS
    #define MATHFUNCSDLL_API __declspec(dllexport) 
    #else
    #define MATHFUNCSDLL_API __declspec(dllimport) 
    #endif
    
    
  3. Agregue una clase básica denominada MyMathFuncs para realizar operaciones matemáticas comunes como suma, resta, multiplicación, y división.El código debería ser similar a este:

    namespace MathFuncs
    {
        // This class is exported from the MathFuncsDll.dll
        class MyMathFuncs
        {
        public: 
            // Returns a + b
            static MATHFUNCSDLL_API double Add(double a, double b); 
    
            // Returns a - b
            static MATHFUNCSDLL_API double Subtract(double a, double b); 
    
            // Returns a * b
            static MATHFUNCSDLL_API double Multiply(double a, double b); 
    
            // Returns a / b
            // Throws const std::invalid_argument& if b is 0
            static MATHFUNCSDLL_API double Divide(double a, double b); 
        };
    }
    

    Cuando se define el símbolo de MATHFUNCSDLL_EXPORTS, el símbolo de MATHFUNCSDLL_API establecerá el modificador de __declspec(dllexport) en las declaraciones de función miembro de este código.Este modificador habilita la función que el archivo DLL exporte para que se pueda utilizar en otras aplicaciones.Cuando MATHFUNCSDLL_EXPORTS es indefinido, MATHFUNCSDLL_API define el modificador de __declspec(dllimport) en las declaraciones de función miembro.Este modificador permite al compilador para optimizar la importación de función DLL para utilizarlo en otras aplicaciones.De forma predeterminada, se define MATHFUNCSDLL_EXPORTS cuando se compila el proyecto de MathFuncsDll.Para obtener más información, vea dllexport, dllimport.

    [!NOTA]

    Si está compilando el proyecto DLL en la línea de comandos, utilice la opción del compilador /D de definir el símbolo de MATHFUNCSDLL_EXPORTS.

  4. En el proyecto MathFuncsDll en Explorador de soluciones, en la carpeta Archivos de código fuente, abra MathFuncsDll.cpp.

  5. Implemente la funcionalidad para MyMathFuncs en el archivo de código fuente.El código debería ser similar a este:

    // MathFuncsDll.cpp : Defines the exported functions for the DLL application.
    //
    
    #include "stdafx.h"
    #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 invalid_argument("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    
  6. Compile la biblioteca de vínculos dinámicos eligiendo Compilación, Generar solución en la barra de menús.

    [!NOTA]

    Si utiliza Express edition que no presente un menú Compilación, en la barra de menú, elija herramientas, Configuración, Configuración para expertos para habilitarla, y elija Compilación, Generar solución.

    [!NOTA]

    Si está compilando un proyecto en la línea de comandos, utilice la opción del compilador /LD para especificar que el archivo de salida se DLL.Para obtener más información, vea /MD, /MT, /LD (Utilizar la biblioteca en tiempo de ejecución).Utilice la opción de compilador /EHsc de habilitar el control de excepciones de C++.Para obtener más información, vea /EH (Modelo de control de excepciones).

Para crear una aplicación que haga referencia DLL

  1. Para crear la aplicación de c++. que haga referencia y utilice la DLL que acaba de crear, en la barra de menú, elija Archivo, Nueva, proyecto.

  2. En el panel izquierdo, en Visual C++, seleccione win32.

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

  4. Especifique un nombre para proyecto-para el ejemplo, MyExecRefsDll-en el cuadro Nombre.Junto a Solución, seleccione Agregar a solución de la lista desplegable.Esto agrega el nuevo proyecto a la misma solución que contiene el archivo DLL.elija el botón de Aceptar .

  5. En la página Información general del cuadro de diálogo Asistente para aplicaciones Win32, elija el botón siguiente.

  6. En la página Configuración de la aplicación, en Tipo de aplicación, seleccione Aplicación de consola.

  7. En la página Configuración de la aplicación, en Opciones adicionales, desactive la casilla encabezado precompilado.

  8. Elija el botón finalizar para crear el proyecto.

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

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

  2. Para utilizar en la aplicación las rutinas matemáticas que creó en el archivo DLL, deberá hacer referencia.Para ello, seleccione el proyecto MyExecRefsDll en Explorador de soluciones y, en la barra de menús, elija proyecto, References.En el cuadro de diálogo Páginas de propiedades, expanda el nodo Propiedades comunes, Marco de trabajo y referencias seleccione y, a continuación 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. El cuadro de diálogo Agregar referencia muestra las bibliotecas que puede hacer referencia.La ficha proyecto enumera los proyectos de la solución actual y las bibliotecas que contienen.En la pestaña Proyectos, active la casilla situada junto a MathFuncsDll, y después elija el botón Aceptar.

  4. Para hacer referencia a los archivos de encabezado de archivo DLL, deberá modificar la ruta de acceso de los directorios incluida.Para ello, en el cuadro de diálogo Páginas de propiedades, expanda el nodo Propiedades de configuración, expanda el nodo C/C++ y, a continuación General.Junto a Directorios de inclusión adicionales, especifique la ruta de acceso de la ubicación del archivo de encabezado MathFuncsDll.h.Puede utilizar un relativa ruta- para el ejemplo. \MathFuncsDll \ — continuación elija el botón Aceptar.

  5. 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;
    
        try
        {
            cout << "a / 0 = " <<
                MathFuncs::MyMathFuncs::Divide(a, 0) << endl; 
        }
        catch (const invalid_argument &e) 
        {
            cout << "Caught exception: " << e.what() << endl; 
        }
    
        return 0;
    }
    
  6. Compile el archivo ejecutable eligiendo Compilación, Generar solución en la barra de menús.

Para ejecutar la aplicación

  1. Asegúrese de que MyExecRefsDll está seleccionado como proyecto predeterminado.En Explorador de soluciones, seleccione MyExecRefsDll y, en la barra de menú, elija proyecto, Establecer como proyecto de inicio.

  2. Para ejecutar el proyecto, en la barra de menú, elija debug, Iniciar sin depurar.El resultado debería ser similar a lo siguiente:

a + b = 106,4 a - b = -91,6 a * b = 732,6 a y b = 0,0747475 excepciones de Caught: ¡b no puede ser cero!

Pasos siguientes

Anterior:Archivos DLL de Visual C++ | Siguiente:Cómo: Crear bibliotecas de clases

Vea también

Tareas

Visual C++ Guided Tour

Walkthrough: Deploying Your Program (C++)

Conceptos

Archivos DLL de Visual C++

Llamar a funciones de un archivo DLL desde aplicaciones programadas en Visual Basic

Otros recursos

Aplicaciones de escritorio de implementación (Visual C++)