Erstellen und Verwenden einer Dynamic Link Library (C++)

Aktualisiert: November 2007

Der erste Bibliothekstyp, den Sie erstellen, ist eine Dynamic Link Library (DLL). Die Verwendung von DLLs stellt eine gute Möglichkeit zur Wiederverwendung von Code dar. Anstatt die gleichen Routinen in jedem von Ihnen erstellten Programm erneut zu implementieren, schreiben Sie die Routinen einmal und verweisen darauf in allen Anwendungen, die diese Funktionen benötigen.

In dieser exemplarischen Vorgehensweise werden folgende Themen behandelt:

  • Erstellen eines neuen DLL (Dynamic Link Library)-Projekts

  • Hinzufügen einer Klasse zur Dynamic Link Library

  • Erstellen einer Anwendung, die auf die Dynamic Link Library verweist

  • Verwenden von Funktionen der Klassenbibliothek in der Konsolenanwendung

  • Ausführen der Anwendung

Vorbereitungsmaßnahmen

In diesem Thema wird davon ausgegangen, dass Sie die Grundlagen der Programmiersprache C++ beherrschen. Wenn Sie gerade die ersten Schritte beim Erlernen von C++ machen, empfehlen wir "C++ Beginner's Guide" von Herb Schildt, online verfügbar unter https://go.microsoft.com/fwlink/?LinkId=115303.

  1. Wählen Sie im Menü Datei die Option Neu und anschließend Projekt... aus.

  2. Wählen Sie im Bereich Projekttypen unter Visual C++ die Option Win32 aus.

  3. Wählen Sie im Bereich Vorlagen die Option Win32-Konsolenanwendung aus.

  4. Wählen Sie einen Namen für das Projekt aus, z. B. MathFuncsDll, und geben Sie ihn in das Feld Name ein. Wählen Sie einen Namen für die Projektmappe aus, z. B. DynamicLibrary, und geben Sie ihn in das Feld Projektmappenname ein.

  5. Klicken Sie auf OK, um den Win32-Anwendungs-Assistenten zu starten. Klicken Sie auf der Seite Übersicht des Dialogfelds Win32-Anwendungs-Assistent auf Weiter.

  6. Wählen Sie auf der Seite Anwendungseinstellungen des Win32-Anwendungs-Assistenten unter Anwendungstyp die Option DLL aus, sofern diese Option zur Verfügung steht. Wählen Sie Konsolenanwendung aus, wenn die Option DLL nicht zur Verfügung steht. Einige Versionen von Visual Studio bieten keine Unterstützung für das Erstellen eines DLL-Projekts mithilfe von Assistenten. Sie können jedoch später festlegen, dass das Projekt in eine DLL kompiliert wird.

  7. Wählen Sie auf der Seite Anwendungseinstellungen des Win32-Anwendungs-Assistenten unter Zusätzliche Optionen die Option Leeres Projekt aus.

  8. Klicken Sie auf 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 zu erstellen, wählen Sie im Menü Projekt die Option Neues Element hinzufügen... aus. Das Dialogfeld Neues Element hinzufügen wird angezeigt. Wählen Sie im Bereich Kategorien unter Visual C++ die Option Code aus. Wählen Sie im Bereich Vorlagen die Option Headerdatei (.h) aus. Wählen Sie einen Namen für die Headerdatei aus, z. B. MathFuncsDll.h, und klicken Sie auf Hinzufügen. Eine leere Datei wird angezeigt.

  2. Fügen Sie eine einfache Klasse mit dem Namen MyMathFuncs hinzu, die zur Ausführung der geläufigen mathematischen Operationen wie Addition, Subtraktion, Multiplikation und Division dient. Der Code sollte etwa folgendermaßen aussehen:

    // 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. Beachten Sie den __declspec(dllexport)-Modifizierer in den Methodendeklarationen in diesem Code. Diese Modifizierer ermöglichen den Export der Methode durch die DLL, sodass sie in anderen Anwendungen verwendet werden kann. Weitere Informationen finden Sie unter dllexport, dllimport.

  4. Um eine Quelldatei für eine neue Klasse zu erstellen, wählen Sie im Menü Projekt die Option Neues Element hinzufügen... aus. Das Dialogfeld Neues Element hinzufügen wird angezeigt. Wählen Sie im Bereich Kategorien unter Visual C++ die Option Code aus. Wählen Sie im Bereich Vorlagen die Option C++-Datei (.cpp) aus. Wählen Sie einen Namen für die Quelldatei aus, z. B. MathFuncsDll.cpp, und klicken Sie auf Hinzufügen. Eine leere Datei wird angezeigt.

  5. Implementieren Sie die Funktionalität von MyMathFuncs in der Quelldatei. Der Code sollte etwa folgendermaßen aussehen:

    // 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. Um aus dem Projekt eine DLL zu erstellen, wählen Sie im Menü Projekt das Projekt MathFuncsDll und dann die Option Eigenschaften... aus. Wählen Sie im linken Bereich unter Konfigurationseigenschaften die Option Allgemein aus. Ändern Sie im rechten Bereich den Konfigurationstyp in Dynamische Bibliothek (.dll). Klicken Sie auf OK, um die Änderungen zu speichern.

    Hinweis:

    Verwenden Sie beim Erstellen eines Projekts über die Befehlszeile die /LD-Compileroption, um anzugeben, dass als Ausgabedatei eine DLL erstellt werden soll. Weitere Informationen finden Sie unter /MD, /MT, /LD (Laufzeitbibliothek verwenden).

  7. Kompilieren Sie die DLL (Dynamic Link Library), indem Sie im Menü Erstellen die Option Projektmappe erstellen auswählen. Dadurch wird eine DLL erstellt, die von anderen Programmen verwendet werden kann. Weitere Informationen über DLLs finden Sie unter DLLs.

  1. Um eine Anwendung zu erstellen, die auf die soeben erstellte DLL (Dynamic Link Library) verweist und diese verwendet, wählen Sie im Menü Datei die Option Neu und anschließend Projekt....

  2. Wählen Sie im Bereich Projekttypen unter Visual C++ die Option Win32 aus.

  3. Wählen Sie im Bereich Vorlagen die Option Win32-Konsolenanwendung aus.

  4. Wählen Sie einen Namen für das Projekt aus, z. B. MyExecRefsDll, und geben Sie ihn in das Feld Name ein. Wählen Sie in der Dropdownliste neben Projektmappe die Option Hinzufügen aus. Dadurch wird das neue Projekt in dieselbe Projektmappe eingefügt, in der sich auch die DLL (Dynamic Link Library) befindet.

  5. Klicken Sie auf OK, um den Win32-Anwendungs-Assistenten zu starten. Klicken Sie auf der Seite Übersicht des Dialogfelds Win32-Anwendungs-Assistent auf Weiter.

  6. Wählen Sie auf der Seite Anwendungseinstellungen des Win32-Anwendungs-Assistenten unter Anwendungstyp die Option Konsolenanwendung aus.

  7. Deaktivieren Sie auf der Seite Anwendungseinstellungen des Win32-Anwendungs-Assistenten unter Zusätzliche Optionen das Kontrollkästchen Vorkompilierte Header.

  8. Klicken Sie auf Fertig stellen, um das Projekt zu erstellen.

So verwenden Sie Funktionen der Klassenbibliothek in der Konsolenanwendung

  1. Nach dem Erstellen einer neuen Konsolenanwendung wird ein leeres Programm für Sie erstellt. Die Quelldatei erhält denselben Namen, den Sie zuvor für das Projekt ausgewählt haben. In diesem Beispiel erhält die Quelldatei den Namen MyExecRefsDll.cpp.

  2. Um die in der DLL (Dynamic Link Library) erstellten mathematischen Routinen zu verwenden, müssen Sie auf die Bibliothek verweisen. Wählen Sie dazu im Menü Projekt die Option Verweise... aus. Erweitern Sie im Dialogfeld Eigenschaftenseiten den Knoten Allgemeine Eigenschaften, wählen Sie Verweise aus, und klicken Sie dann auf die Schaltfläche Neuen Verweis hinzufügen. Weitere Informationen zum Dialogfeld Verweise… finden Sie unter Framework und Verweise, Allgemeine Eigenschaften, Dialogfeld '<Projektname>-Eigenschaftenseiten'.

  3. Das Dialogfeld Verweis hinzufügen wird angezeigt. Dieses Dialogfeld listet alle Bibliotheken auf, auf die Sie verweisen können. Auf der Registerkarte Projekt werden alle Projekte in der aktuellen Projektmappe und sämtliche darin enthaltenen Bibliotheken aufgelistet. Wählen Sie auf der Registerkarte Projekte das Projekt MathFuncsDll aus. Klicken Sie dann auf OK. Weitere Informationen zum Dialogfeld Verweis hinzufügen finden Sie unter Dialogfeld "Verweis hinzufügen".

  4. Um auf die Headerdateien der DLL (Dynamic Link Library) zu verweisen, müssen Sie den Includeverzeichnispfad ändern. Erweitern Sie dazu im Dialogfeld Eigenschaftenseiten den Knoten Konfigurationseigenschaften, erweitern Sie den Knoten C/C++, und wählen Sie dann Allgemein aus. Geben Sie neben Zusätzliche Includeverzeichnisse den Pfad des Speicherorts der Headerdatei MathFuncsDll.h ein.

  5. Die ausführbare Datei lädt DLLs (Dynamic Link Librarys) erst zur Laufzeit. Sie müssen dem System mitteilen, wo MathFuncsDll.dll zu finden ist. Verwenden Sie dafür die PATH-Umgebungsvariable. Erweitern Sie dazu im Dialogfeld Eigenschaftenseiten den Knoten Konfigurationseigenschaften, und wählen Sie Debuggen aus. Geben Sie neben Umgebung Folgendes ein: PATH=< Pfad der Datei MathFuncsDll.dll>, wobei <Pfad der Datei MathFuncsDll.dll> durch den tatsächlichen Speicherort von MathFuncsDll.dll ersetzt wird. Klicken Sie auf OK, um alle Änderungen zu speichern.

    Hinweis:

    Wenn Sie beabsichtigen, die ausführbare Datei nicht innerhalb von Visual Studio, sondern über die Befehlszeile auszuführen, müssen Sie die PATH-Umgebungsvariable über die Befehlszeile wie folgt manuell aktualisieren: set PATH=%PATH%;<Pfad der Datei MathFuncsDll.dll>, wobei <Pfad der Datei MathFuncsDll.dll> durch den tatsächlichen Speicherort von MathFuncsDll.dll ersetzt wird.

  6. 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;
    
        return 0;
    }
    
  7. Erstellen Sie die ausführbare Datei, indem Sie im Menü Erstellen den Befehl Projektmappe erstellen auswählen.

So führen Sie die Anwendung aus

  1. Stellen Sie sicher, dass MyExecRefsDll als Standardprojekt ausgewählt ist. Wählen Sie im Projektmappen-Explorer das Projekt MyExecRefsDll aus, und wählen Sie dann im Menü Projekt die Option Als Startprojekt festlegen aus.

  2. Um das Projekt auszuführen, wählen Sie im Menü Debuggen die Option Starten ohne Debuggen aus. Die Ausgabe sollte dieser Ausgabe ähneln:

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

Nächste Schritte

Zurück:Erstellen von wiederverwendbarem Code (C++) | Weiter:Erstellen und Verwenden einer statischen Bibliothek (C++)

Siehe auch

Aufgaben

Einführung in Visual C++

Bereitstellen des Programms (C++)

Konzepte

DLLs

Weitere Ressourcen

Allgemeine Programmierungsmethodiken

Bereitstellung (C++)