Freigeben über


Walkthrough: Creating and Using a Dynamic Link Library (C++)

In dieser schrittweise erläuterten exemplarischen Vorgehensweisen, wie eine DLL (Dynamic Link Library) für die Verwendung mit App in C++ erstellt wird.Verwenden einer Bibliothek stellt eine gute Möglichkeit, Code wiederzuverwenden.Anstatt die gleichen Routinen, in jedem Programm erneut zu implementieren, das Sie erstellen, schreiben Sie ihnen einmal und verweisen dann von den App, die diese Funktionen benötigen.Wenn Sie Code in die DLL eingeben, speichern Sie Leerzeichen in jeder App, der darauf verweist und Sie die DLL aktualisieren können, ohne dass alle App.Weitere Informationen über DLLs finden Sie unter DLLs in Visual C++.

Diese exemplarische Vorgehensweise umfasst die folgenden Aufgaben:

  • Erstellen eines DLL-Projekts.

  • Hinzufügen einer Klasse zur DLL.

  • Eine Konsolen-App erstellen, die das dynamische Verknüpfung Ladezeit verwendet, um den DLLs zu verweisen.

  • Verwenden von Funktionen der Klasse in der App.

  • Ausführen der App.

In dieser exemplarischen Vorgehensweise wird eine DLL erstellt, die von den App nur aufgerufen werden kann, die C++-Aufrufkonventionen verwenden.Informationen darüber, wie DLLs mit anderen Sprachen, finden Sie unter Aufrufen von DLL-Funktionen aus Visual Basic-Anwendungen heraus erstellt.

Vorbereitungsmaßnahmen

In diesem Thema wird davon ausgegangen, dass Sie die Grundlagen der Programmiersprache C++ beherrschen.

  1. Wählen Sie in der Menüleiste Datei, Neu, Projekt aus.

  2. Im linken Bereich des Dialogfelds Neues Projekt, erweitern Sie Installiert, Vorlagen, Visual C++, und wählen Sie dann Win32 aus.

  3. Wählen Sie im mittleren Bereich ausgewähltes Win32-Konsolenanwendung.

  4. Geben Sie einen Namen für Projekt – z. B. MathFuncsDll-im Feld Name an.Geben Sie einen Namen für Projektmappe – z. B. DynamicLibrary-im Feld Projektmappenname an.Klicken Sie auf die Schaltfläche OK.

  5. Auf der Seite des Dialogfelds ÜbersichtWin32-Anwendungs-Assistent, wählen Sie die Schaltfläche Weiter aus.

  6. Klicken Sie auf der Seite unter AnwendungseinstellungenAnwendungstyp, wählen Sie DLL.

  7. Wählen Sie die Schaltfläche Fertig stellen, um das Projekt zu erstellen.

So fügen Sie der Dynamic Link Library eine Klasse hinzu

  1. Um eine Headerdatei für eine neue Klasse, in der Menüleiste zu erstellen, wählen Sie Projekt, Neues Element hinzufügen.Neues Element hinzufügen im Dialogfeld im linken Bereich, unter Visual C++, wählen Sie Code.Wählen Sie im mittleren Bereich ausgewähltes Headerdatei (.h).Geben Sie einen Namen für den Header Datei-für Beispiel an, MathFuncsDll.h-and wählen Sie die Schaltfläche Hinzufügen aus.Eine leere Headerdatei wird angezeigt.

  2. Fügen Sie folgenden Code am Anfang der Headerdatei hinzu:

    // MathFuncsDll.h
    
    #ifdef MATHFUNCSDLL_EXPORTS
    #define MATHFUNCSDLL_API __declspec(dllexport) 
    #else
    #define MATHFUNCSDLL_API __declspec(dllimport) 
    #endif
    
    
  3. Fügen Sie eine Basisklasse hinzu, der MyMathFuncs, um allgemeine mathematische Operationen wie Addition, Subtraktion, Multiplikation und Division auszuführen genannt wird.Der Code sollte diesem ähneln:

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

    Wenn das MATHFUNCSDLL_EXPORTS-Symbol definiert ist, wird das MATHFUNCSDLL_API-Symbol den __declspec(dllexport)-Modifizierer in den Memberfunktionsdeklarationen in diesem Code fest.Dieser Modifizierer aktiviert die von der DLL exportierten Funktion, werden, damit er von anderen Anwendungen verwendet werden kann.Wenn MATHFUNCSDLL_EXPORTS nicht definiert ist, definiert MATHFUNCSDLL_API den __declspec(dllimport)-Modifizierer in den Memberfunktionsdeklarationen.Dieser Modifizierer kann der Compiler, um das Importieren der Funktion aus der DLL für die Verwendung in anderen Anwendungen zu optimieren.Standardmäßig wird MATHFUNCSDLL_EXPORTS definiert, wenn das MathFuncsDll-Projekt erstellt wird.Weitere Informationen finden Sie unter dllexport, dllimport.

    HinweisHinweis

    Wenn Sie das DLL-Projekt in der Befehlszeile erstellen, verwenden Sie die /D-Compileroption, das MATHFUNCSDLL_EXPORTS-Symbol zu definieren.

  4. Im MathFuncsDll Projekt in Projektmappen-Explorer, im Ordner Quelldateien, öffnen Sie MathFuncsDll.cpp.

  5. Implementieren Sie die Funktionalität von MyMathFuncs in der Quelldatei.Der Code sollte diesem ähneln:

    // 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. Kompilieren Sie die Dynamic Link Library), indem Sie Build, Projektmappe erstellen auf der Menüleiste auswählen.

    HinweisHinweis

    Wenn Sie Express Edition verwenden, das kein Menü Build, auf der Menüleiste angezeigt wird, wählen Sie Tools, Einstellungen, Erweiterte Einstellungen, um sie zu aktivieren, und wählen Sie dann Build, Projektmappe erstellen aus.

    HinweisHinweis

    Wenn Sie ein Projekt in der Befehlszeile erstellen, verwenden Sie die - Compileroption, /LD anzugeben, dass die Ausgabedatei, DLL sein soll.Weitere Informationen finden Sie unter /MD, /MT, /LD (Laufzeitbibliothek verwenden).Verwenden Sie die - Compileroption, das /EHsc C++-Ausnahmebehandlung zu aktivieren.Weitere Informationen finden Sie unter /EH (Ausnahmebehandlungsmodell).

So fügen Sie eine Anwendung erstellen, die die DLL verweist

  1. Um App in C++ mit verweist und die DLL verwenden, das Sie gerade in der Menüleiste erstellt haben, wählen Sie Datei, Neu, Projekt.

  2. Klicken Sie im linken Bereich unter Visual C++, wählen Sie Win32.

  3. Wählen Sie im mittleren Bereich ausgewähltes Win32-Konsolenanwendung.

  4. Geben Sie einen Namen für Projekt – z. B. MyExecRefsDll-im Feld Name an.Klicken Sie neben Projektmappe wählen Sie Hinzufügen aus der Dropdownliste aus.Dadurch wird das neue Projekt in dieselbe Projektmappe hinzu, die die DLL enthält.Klicken Sie auf die Schaltfläche OK.

  5. Auf der Seite des Dialogfelds ÜbersichtWin32-Anwendungs-Assistent, wählen Sie die Schaltfläche Weiter aus.

  6. Klicken Sie auf der Seite unter AnwendungseinstellungenAnwendungstyp, wählen Sie Konsolenanwendung.

  7. Klicken Sie auf der Seite unter AnwendungseinstellungenZusätzliche Optionen, deaktivieren Sie das Kontrollkästchen Vorkompilierte Headerdatei.

  8. Wählen Sie die Schaltfläche Fertig stellen, um das Projekt zu erstellen.

Um die Funktionen der Klassenbibliothek in der App verwenden

  1. Nachdem Sie eine Konsolen-App erstellen, wird ein leeres Programm für Sie erstellt.Die Quelldatei erhält denselben Namen, den Sie zuvor ausgewählt haben.In diesem Beispiel erhält die Quelldatei den Namen MyExecRefsDll.cpp.

  2. Um in der App die mathematischen Routinen zu verwenden Sie die in der DLL erstellt haben, müssen Sie es verweisen.Um dies zu erreichen, wählen Sie hierzu das Projekt MyExecRefsDll in Projektmappen-Explorer und anschließend auf der Menüleiste, Projekt auswählen, Verweise aus.Im Dialogfeld Eigenschaftenseiten erweitern Sie den Knoten, wählen Sie Allgemeine EigenschaftenFramework und Verweise, und wählen Sie dann die Schaltfläche Neuen Verweis hinzufügen aus.Weitere Informationen zum Dialogfeld Verweise finden Sie unter Framework und Verweise, Allgemeine Eigenschaften, Dialogfeld '<Projektname>-Eigenschaftenseiten'.

  3. Das Dialogfeld Verweis hinzufügen werden die Bibliotheken auf, auf die Sie verweisen können.Die Registerkarte Projekt werden die Projekte in der aktuellen Projektmappe und alle Bibliotheken aufgeführt, auf die sie enthalten.Projekte auf der Registerkarte das Kontrollkästchen neben MathFuncsDll aus, und wählen Sie dann die Schaltfläche OK aus.

  4. Um die Headerdateien der DLL zu verweisen, müssen Sie den enthaltenen Verzeichnispfad ändern.Sie dazu, Eigenschaftenseiten im Dialogfeld auf, erweitern Sie den Knoten KonfigurationseigenschaftenC/C++, erweitern den Knoten und wählen dann Allgemein aus.Klicken Sie neben Zusätzliche Includeverzeichnisse geben Sie den Pfad des Speicherorts der MathFuncsDll.h-Headerdatei an.Sie können einen relativen Pfad verwenden – z. B. ..\MathFuncsDll\ –, wählen Sie dann die Schaltfläche OK aus.

  5. Nun können Sie die MyMathFuncs-Klasse in dieser Anwendung verwenden.Ersetzen Sie den Inhalt von MyExecRefsDll.cpp durch folgenden Code:

    // 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. Erstellen Sie die ausführbare Datei, indem Sie Build, Projektmappe erstellen auf der Menüleiste auswählen.

So führen Sie die Anwendung aus

  1. Stellen Sie sicher, dass MyExecRefsDll als Standardprojekt ausgewählt ist.In Projektmappen-Explorer, in Auswahl- MyExecRefsDll und dann in der Menüleiste, wählen Sie Projekt, Als Startprojekt festlegen aus.

  2. Um das Projekt, in der Menüleiste auszuführen, wählen Sie Debuggen, Starten ohne Debugging.Die Ausgabe sollte dieser Ausgabe ähneln:

a + b = 106,4 - b = -91,6 ein * b = 732,6 ein/b = 0,0747475 fingen Ausnahme ab: b kann nicht Null sein!

Nächste Schritte

Zurück:DLLs in Visual C++ | Weiter:How to: Create Class Libraries

Siehe auch

Aufgaben

Visual C++ Guided Tour

Walkthrough: Deploying Your Program (C++)

Konzepte

DLLs in Visual C++

Aufrufen von DLL-Funktionen aus Visual Basic-Anwendungen heraus

Weitere Ressourcen

Desktopanwendungen (Visual C++) bereitstellen