Partager via


Procédure pas à pas : création et utilisation d'une bibliothèque de liens dynamiques (C++)

Cette procédure pas - à - pas montre comment créer une bibliothèque de liens dynamiques (DLL) à utiliser avec l'application c++.À l'aide d'une bibliothèque est une grande possibilité de réutiliser le code.Plutôt que de nouveau implémenter les mêmes routines à chaque programme que vous créez, vous les écrivez une fois puis vous les référencez dans les applications qui requièrent la fonctionnalité.En plaçant le code dans la DLL, vous ménagez de l'espace dans chaque application que les références il, et vous pouvez mettre à jour la DLL sans recompiler toutes les applications.Pour plus d'informations concernant les DLL, consultez DLL dans Visual C++.

Cette procédure pas - à - pas décrit les tâches suivantes :

  • Créer un projet de DLL.

  • Ajouter une classe à la DLL.

  • Création d'une application console qui utilise la dynamique de temps de chargement de liaison pour référencer la DLL.

  • Utilisation des fonctionnalités de la classe dans l'application.

  • Exécuter l'application.

Cette procédure pas - à - pas crée une DLL qui peut être appelé des applications qui utilisent des conventions d'appel en C++.Pour plus d'informations sur la création de DLL à utiliser avec d'autres langages, consultez Appel de fonctions de la DLL à partir d'applications Visual Basic.

Composants requis

Cette rubrique suppose que vous comprenez les notions de base du langage C++.

Pour créer un projet de définition de données (DLL) bibliothèque de liens dynamiques

  1. Dans la barre de menus, sélectionnez Fichier, Nouveau, Project.

  2. Dans le volet gauche de la boîte de dialogue Nouveau projet, développez Installé, Modèles, Visual C++, puis sélectionnez Win32.

  3. Dans le volet central, sélectionnez Application console Win32.

  4. Spécifiez un nom pour projet- pour l'exemple, MathFuncsDll- dans la zone Nom .Spécifiez un nom pour solution- pour l'exemple, DynamicLibrary- dans la zone Nom de la solution .Cliquez sur le bouton OK.

  5. Dans la page Vue d'ensemble de la boîte de dialogue Assistant Application Win32, choisissez le bouton Suivant .

  6. Dans la page Paramètres de l'application, sous Type d'application, sélectionnez DLL.

  7. Choisissez le bouton Terminer pour créer le projet.

Ajout d'une classe dans la bibliothèque de liens dynamiques

  1. Pour créer un fichier d'en-tête pour une nouvelle classe, dans la barre de menus, sélectionnez Projet, Ajouter un nouvel élément.Dans la boîte de dialogue Ajouter un nouvel élément, dans le volet gauche, sous Visual C++, sélectionnez Code.Dans le volet central, sélectionnez Fichier d'en-tête (.h).Spécifiez un nom pour l'en-tête fichier-pour l'exemple, MathFuncsDll.h-and puis choisissez le bouton Ajouter .Un fichier d'en-tête vide s'affiche.

  2. Ajoutez le code suivant au début du fichier d'en-tête :

    // MathFuncsDll.h
    
    #ifdef MATHFUNCSDLL_EXPORTS
    #define MATHFUNCSDLL_API __declspec(dllexport) 
    #else
    #define MATHFUNCSDLL_API __declspec(dllimport) 
    #endif
    
    
  3. Ajoutez une classe de base nommée MyMathFuncs pour effectuer des opérations mathématiques courantes telles que l'addition, la soustraction, la multiplication, et la division.Le code doit se présenter comme suit :

    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); 
        };
    }
    

    Lorsque le symbole de MATHFUNCSDLL_EXPORTS est défini, le symbole de MATHFUNCSDLL_API définira le modificateur d' __declspec(dllexport) dans les déclarations de fonction membre dans ce code.Ce modificateur permet à la fonction d'être exportée par la DLL afin qu'il puisse être utilisé par d'autres applications.Lorsque MATHFUNCSDLL_EXPORTS n'est pas défini, MATHFUNCSDLL_API définit le modificateur d' __declspec(dllimport) dans les déclarations de fonction membre.Ce modificateur permet au compilateur d'optimiser importer de la fonction de la DLL à utiliser dans d'autres applications.Par défaut, MATHFUNCSDLL_EXPORTS est défini lorsque votre projet de MathFuncsDll est généré.Pour plus d'informations, consultez dllexport, dllimport.

    [!REMARQUE]

    Si vous générez le projet de DLL sur la ligne de commande, utilisez l'option du compilateur pour /D de définir le symbole de MATHFUNCSDLL_EXPORTS.

  4. Dans le projet de MathFuncsDll dans Explorateur de solutions, dans le dossier Fichiers sources, ouvrez MathFuncsDll.cpp.

  5. Implémentez les fonctionnalités de MyMathFuncs dans le fichier source.Le code doit se présenter comme suit :

    // 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. Compilez la bibliothèque de liens dynamiques en choisissant Build, Générer la solution dans la barre de menus.

    [!REMARQUE]

    Si vous utilisez une édition Express qui n'affiche pas de menu Build, dans la barre de menus, sélectionnez Outils, Paramètres, Paramètres avancés pour l'activer, puis choisissez Build, Générer la solution.

    [!REMARQUE]

    Si vous générez un projet sur la ligne de commande, utilisez l'option du compilateur pour /LD de spécifier que le fichier de sortie doit être une DLL.Pour plus d'informations, consultez /MD, /MT, /LD (Utiliser la bibliothèque Runtime).Utilisez l'option du compilateur pour /EHsc d'activer la gestion des exceptions C++.Pour plus d'informations, consultez /EH (Modèle de gestion des exceptions).

Pour créer une application qui référence la DLL

  1. Pour créer l'application c++ qui référencera et utiliser la DLL que vous venez de créer, dans la barre de menus, sélectionnez Fichier, Nouveau, Projet.

  2. Dans le volet gauche, sous Visual C++, sélectionnez Win32.

  3. Dans le volet central, sélectionnez Application console Win32.

  4. Spécifiez un nom pour projet- pour l'exemple, MyExecRefsDll- dans la zone Nom .En regard de Solution, sélectionnez Ajouter à la solution dans la liste déroulante.Cela ajoute le projet à la même solution qui contient la DLL.Cliquez sur le bouton OK.

  5. Dans la page Vue d'ensemble de la boîte de dialogue Assistant Application Win32, choisissez le bouton Suivant .

  6. Dans la page Paramètres de l'application, sous Type d'application, sélectionnez Application console.

  7. Dans la page Paramètres de l'application, sous Options supplémentaires, désactivez la case à cocher en-tête précompilé .

  8. Choisissez le bouton Terminer pour créer le projet.

Pour utiliser les fonctionnalités de la bibliothèque de classes dans l'application

  1. Après avoir créé une application console, un programme vide est créé pour vous.Le nom du fichier source est identique au nom que vous avez choisi précédemment.Dans cet exemple, il s'agit de MyExecRefsDll.cpp.

  2. Pour utiliser dans l'application les routines mathématiques que vous avez créés dans la DLL, vous devez le référencer.Pour cela, sélectionnez le projet MyExecRefsDll de dans Explorateur de solutions, puis dans la barre de menus, sélectionnez Projet, Références.Dans la boîte de dialogue Pages de propriétés, développez le nœud Propriétés communes, sélectionnez Structure et références, puis choisissez le bouton Ajouter une nouvelle référence .Pour plus d'informations sur la boîte de dialogue Références, consultez Structure et Références, Propriétés communes, boîte de dialogue Pages de propriétés de <NomProjet>.

  3. La boîte de dialogue Ajouter une référence répertorie les bibliothèques que vous pouvez référencer.L'onglet de Projet répertorie les projets dans la solution actuelle et toutes les bibliothèques qu'ils contiennent.Sous l'onglet de Projets, activez la case à cocher en regard de MathFuncsDll, puis choisissez le bouton OK .

  4. Pour référencer des fichiers d'en-tête de la DLL, vous devez modifier le chemin d'accès de répertoires inclus.Pour ce faire, dans la boîte de dialogue Pages de propriétés, développez le nœud Propriétés de configuration, développez le nœud C/C++, puis sélectionnez Général.En regard de Répertoires Include supplémentaires, spécifiez le chemin de l'emplacement du fichier d'en-tête MathFuncsDll.h de.Vous pouvez utiliser un parent chemin-pour l'exemple. MathFuncsDll\\ — choisissez le bouton OK .

  5. Vous pouvez maintenant utiliser la classe MyMathFuncs dans cette application.Remplacez le contenu de MyExecRefsDll.cpp par le code suivant :

    // 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. Générez le fichier exécutable en choisissant Build, Générer la solution dans la barre de menus.

Pour exécuter l'application

  1. Assurez-vous que MyExecRefsDll est sélectionné comme projet par défaut.Dans Explorateur de solutions, sélectionnez MyExecRefsDll, puis dans la barre de menus, sélectionnez Projet, Définir comme projet de démarrage.

  2. Pour exécuter le projet, dans la barre de menus, sélectionnez Déboguer, Exécuter sans débogage.La sortie doit ressembler à ceci :

a + b = 106,4 a - b = -91,6 * a b = 732,6 a et b = 0,0747475 a intercepté l'exception : b ne peut pas être zéro !

Étapes suivantes

Précédent :DLL dans Visual C++ | Suivant :Comment : créer des bibliothèques de classes

Voir aussi

Tâches

Visual C++ Guided Tour

Walkthrough: Deploying Your Program (C++)

Concepts

DLL dans Visual C++

Appel de fonctions de la DLL à partir d'applications Visual Basic

Autres ressources

Applications bureautiques de déploiement (Visual C++)