Exemplarische Vorgehensweise: Erstellen und Verwenden Ihrer eigenen Dynamic Link Library (C++)Walkthrough: Create and use your own Dynamic Link Library (C++)

Diese exemplarische Vorgehensweise zeigt ausführlich, wie Sie die Visual Studio-IDE verwenden, um selbst eine DLL (Dynamic Link Library) mit Microsoft C++ (MSCV) zu erstellen.This step-by-step walkthrough shows how to use the Visual Studio IDE to create your own dynamic link library (DLL) written in Microsoft C++ (MSVC). Danach wird gezeigt, wie die DLL aus einer anderen C++-App verwendet wird.Then it shows how to use the DLL from another C++ app. DLLs (in UNIX-basierten Betriebssystemen auch als freigegebene Bibliotheken bezeichnet) gehören zu den nützlichsten Arten von Windows-Komponenten.DLLs (also known as shared libraries in UNIX-based operating systems) are one of the most useful kinds of Windows components. Sie können damit Code und Ressourcen freigeben und die Größe von Apps verkleinern.You can use them as a way to share code and resources, and to shrink the size of your apps. DLLs vereinfachen die Wartung und Erweiterung Ihrer Apps.DLLs can even make it easier to service and extend your apps.

In dieser exemplarischen Vorgehensweise erstellen Sie eine DLL, die einige mathematische Funktionen implementiert.In this walkthrough, you'll create a DLL that implements some math functions. Anschließend erstellen Sie eine Konsolen-App, die die Funktionen aus der DLL verwendet.Then you'll create a console app that uses the functions from the DLL. Sie erhalten auch eine Einführung in einige der Programmierungstechniken und -konventionen, die in Windows-DLLs zum Einsatz kommen.You'll also get an introduction to some of the programming techniques and conventions used in Windows DLLs.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben behandelt:This walkthrough covers these tasks:

  • Erstellen eines DLL-Projekts in Visual StudioCreate a DLL project in Visual Studio.

  • Hinzufügen von exportierten Funktionen und Variablen zur DLLAdd exported functions and variables to the DLL.

  • Erstellen eines Konsolen-App-Projekts in Visual StudioCreate a console app project in Visual Studio.

  • Verwenden der aus der DLL importierten Funktionen und Variablen in der Konsolen-AppUse the functions and variables imported from the DLL in the console app.

  • Ausführen der fertigen AppRun the completed app.

Wie eine statisch verknüpfte Bibliothek exportiert eine DLL Variablen, Funktionen und Ressourcen nach Namen.Like a statically linked library, a DLL exports variables, functions, and resources by name. Eine Client-App importiert die Namen, um diese Variablen, Funktionen und Ressourcen zu verwenden.A client app imports the names to use those variables, functions, and resources. Im Gegensatz zu einer statisch verknüpften Bibliothek stellt Windows die Verbindung zwischen den Importen in Ihrer App und den Exporten in einer DLL zur Lade- oder Laufzeit her, nicht zum Zeitpunkt der Verknüpfung.Unlike a statically linked library, Windows connects the imports in your app to the exports in a DLL at load time or at run time, instead of connecting them at link time. Zum Herstellen dieser Verbindungen erfordert Windows zusätzliche Informationen, die nicht Bestandteil des standardmäßigen C++-Kompilierungsmodells sind.Windows requires extra information that isn't part of the standard C++ compilation model to make these connections. Der MSVC-Compiler implementiert einige Microsoft-spezifische Erweiterungen für C++, um diese zusätzlichen Informationen bereitzustellen.The MSVC compiler implements some Microsoft-specific extensions to C++ to provide this extra information. Wir werden diese Erweiterungen im weiteren Verlauf näher erläutern.We explain these extensions as we go.

In dieser exemplarischen Vorgehensweise werden zwei Visual Studio-Projektmappen erstellt: eine, die die DLL kompiliert, und eine andere, die die Client-App kompiliert.This walkthrough creates two Visual Studio solutions; one that builds the DLL, and one that builds the client app. Die DLL verwendet die C-Aufrufkonvention.The DLL uses the C calling convention. Sie kann von Apps aufgerufen werden, die in anderen Programmiersprachen geschrieben wurden, solange die Plattform, die Aufrufkonventionen und die Verknüpfungskonventionen übereinstimmen.It can be called from apps written in other programming languages, as long as the platform, calling conventions, and linking conventions match. Die Client-App verwendet implizite Verknüpfungen, bei denen Windows die App zur Ladezeit mit der DLL verknüpft.The client app uses implicit linking, where Windows links the app to the DLL at load-time. Dank dieser Art der Verknüpfung kann die App die von der DLL bereitgestellten Funktionen genauso nutzen wie die Funktionen in einer statisch verknüpften Bibliothek.This linking lets the app call the DLL-supplied functions just like the functions in a statically linked library.

In dieser exemplarischen Vorgehensweise werden einige gängige Situationen nicht behandelt.This walkthrough doesn't cover some common situations. Die Verwendung von C++-DLLs durch andere Programmiersprachen wird im Code nicht veranschaulicht.The code doesn't show the use of C++ DLLs by other programming languages. Es wird nicht gezeigt, wie eine DLL als reine Ressource erstellt oder das explizite Verknüpfen verwendet werden, um DLLs zur Laufzeit anstatt zur Ladezeit zu laden.It doesn't show how to create a resource-only DLL, or how to use explicit linking to load DLLs at run-time rather than at load-time. Keine Sorge: Für all diese Verfahren können Sie MSVC und Visual Studio verwenden.Rest assured, you can use MSVC and Visual Studio to do all these things.

Links mit weiteren Informationen zu DLLs finden Sie im Artikel Erstellen von C/C++-DLLs in Visual Studio.For links to more information about DLLs, see Create C/C++ DLLs in Visual Studio. Weitere Informationen zu impliziten und expliziten Verknüpfungen finden Sie unter Bestimmen der geeigneten Verknüpfungsmethode.For more information about implicit linking and explicit linking, see Determine which linking method to use. Informationen zum Erstellen von C++-DLLs zur Verwendung mit Programmiersprachen, die Verknüpfungskonventionen der Sprache C verwenden, finden Sie unter Exportieren von C++-Funktionen zur Verwendung in ausführbaren C-Dateien.For information about creating C++ DLLs for use with programming languages that use C-language linkage conventions, see Exporting C++ functions for use in C-language executables. Informationen zum Erstellen von DLLs zur Verwendung mit .NET-Sprachen finden Sie unter Aufrufen von DLL-Funktionen aus Visual Basic-Anwendungen heraus.For information about how to create DLLs for use with .NET languages, see Calling DLL Functions from Visual Basic Applications.

VoraussetzungenPrerequisites

  • Ein Computer, auf dem Microsoft Windows 7 oder eine höhere Version ausgeführt wird.A computer that runs Microsoft Windows 7 or later versions. Für ein optimales Entwicklungserlebnis empfehlen wir Windows 10.We recommend Windows 10 for the best development experience.
  • Eine Kopie von Visual Studio.A copy of Visual Studio. Informationen zum Herunterladen und Installieren von Visual Studio finden Sie unter Installieren von Visual Studio.For information on how to download and install Visual Studio, see Install Visual Studio. Wenn Sie das Installationsprogramm ausführen, stellen Sie sicher, dass die Workload Desktopentwicklung mit C++ aktiviert ist.When you run the installer, make sure that the Desktop development with C++ workload is checked. Machen Sie sich keine Sorgen, wenn Sie diese Workload beim Installieren von Visual Studio nicht installiert haben.Don't worry if you didn't install this workload when you installed Visual Studio. Sie können das Installationsprogramm erneut ausführen und die Workload jetzt installieren.You can run the installer again and install it now.

    Desktopentwicklung mit C++Desktop development with C++

  • Eine Kopie von Visual Studio.A copy of Visual Studio. Informationen zum Herunterladen und Installieren von Visual Studio 2015 finden Sie unter Installieren von Visual Studio 2015.For information on how to download and install Visual Studio 2015, see Install Visual Studio 2015. Verwenden Sie eine benutzerdefinierte Installation, um den C++-Compiler und die Tools zu installieren, da diese nicht standardmäßig installiert werden.Use a Custom installation to install the C++ compiler and tools, since they're not installed by default.
  • Grundkenntnisse der Verwendung der Visual Studio-IDE.An understanding of the basics of using the Visual Studio IDE. Wenn Sie bereits früher Windows-Desktop-Apps verwendet haben, dürften keine Verständnisprobleme auftreten.If you've used Windows desktop apps before, you can probably keep up. Eine Einführung finden Sie unter Willkommen in der Visual Studio-IDE.For an introduction, see Visual Studio IDE feature tour.

  • Grundlegende Kenntnisse der Programmiersprache C++.An understanding of enough of the fundamentals of the C++ language to follow along. Keine Sorge: Wir verwenden keine allzu komplizierten Verfahren.Don't worry, we don't do anything too complicated.

Hinweis

Bei dieser exemplarischen Vorgehensweise wird angenommen, dass Sie Visual Studio 2017, Version 15.9 oder höher verwenden.This walkthrough assumes you're using Visual Studio 2017 version 15.9 or later. In einigen früheren Versionen von Visual Studio 2017 waren Fehler in den Codevorlagen aufgetreten, oder es wurden verschiedene Dialogfelder für die Benutzeroberfläche verwendet.Some earlier versions of Visual Studio 2017 had defects in the code templates, or used different user interface dialogs. Verwenden Sie den Visual Studio-Installer, um Visual Studio 2017 auf Version 15.9 oder höher zu aktualisieren und somit Probleme zu vermeiden.To avoid problems, use the Visual Studio Installer to update Visual Studio 2017 to version 15.9 or later.

Erstellen des DLL-ProjektsCreate the DLL project

Mit den folgenden Aufgaben erstellen Sie ein Projekt für Ihre DLL, fügen Code hinzu, und kompilieren das Projekt.In this set of tasks, you create a project for your DLL, add code, and build it. Als Erstes starten Sie die Visual Studio-IDE und melden sich ggf. an.To begin, start the Visual Studio IDE, and sign in if you need to. Die Anweisungen variieren leicht, je nachdem, welche Version von Visual Studio Sie verwenden.The instructions vary slightly depending on which version of Visual Studio you're using. Stellen Sie sicher, dass Sie in der Dropdownliste links oben auf dieser Seite die richtige Version ausgewählt haben.Make sure you have the correct version selected in the control in the upper left of this page.

So erstellen Sie ein DLL-Projekt in Visual Studio 2019To create a DLL project in Visual Studio 2019

  1. Klicken Sie in der Menüleiste auf Datei > Neu > Projekt, um das Dialogfeld Neues Projekt erstellen zu öffnen.On the menu bar, choose File > New > Project to open the Create a New Project dialog box.

    Erstellen eines neuen DLL-ProjektsCreate a new DLL project

  2. Legen Sie oben im Dialogfeld die Sprache auf C++ , die Plattform auf Windows und den Projekttyp auf Bibliothek fest.At the top of the dialog, set Language to C++, set Platform to Windows, and set Project type to Library.

  3. Klicken Sie in der gefilterten Projekttypliste zunächst auf Dynamic Link Library (DLL) und dann auf Weiter.From the filtered list of project types, select Dynamic-link Library (DLL), and then choose Next.

  4. Geben Sie auf der Seite Neues Projekt konfigurieren in das Feld Projektname den Namen MathLibrary ein, um einen Namen für das Projekt festzulegen.In the Configure your new project page, enter MathLibrary in the Project name box to specify a name for the project. Behalten Sie die Standardwerte für Speicherort und Projektmappenname bei.Leave the default Location and Solution name values. Legen Sie Projektmappe auf Neue Projektmappe erstellen fest.Set Solution to Create new solution. Deaktivieren Sie bei Bedarf die Option Legen Sie die Projektmappe und das Projekt im selben Verzeichnis ab.Uncheck Place solution and project in the same directory if it's checked.

  5. Klicken Sie auf die Schaltfläche Erstellen, um das Projekt zu erstellen.Choose the Create button to create the project.

Wenn die Projektmappe erstellt wird, sehen Sie das generierte Projekt und die Quelldateien in Visual Studio im Fenster Projektmappen-Explorer.When the solution is created, you can see the generated project and source files in the Solution Explorer window in Visual Studio.

Screenshot des Visual Studio 2019-Fensters „Projektmappen-Explorer“, in dem die MathLibrary hervorgehoben istScreenshot of the Visual Studio 2019 Solution Explorer window with the Math Library highlighted.

So erstellen Sie ein DLL-Projekt in Visual Studio 2017To create a DLL project in Visual Studio 2017

  1. Klicken Sie auf der Menüleiste auf Datei > Neu > Projekt, um das Dialogfeld Neues Projekt zu öffnen.On the menu bar, choose File > New > Project to open the New Project dialog box.

  2. Klicken Sie im linken Bereich des Dialogfelds Neues Projekt auf Installiert > Visual C++ > Windows Desktop.In the left pane of the New Project dialog box, select Installed > Visual C++ > Windows Desktop. Klicken Sie im mittleren Bereich auf Dynamic Link Library (DLL) .In the center pane, select Dynamic-Link Library (DLL). Geben Sie MathLibrary in das Feld Name ein, um einen Namen für das Projekt anzugeben.Enter MathLibrary in the Name box to specify a name for the project. Behalten Sie die Standardwerte für Speicherort und Projektmappenname bei.Leave the default Location and Solution name values. Legen Sie Projektmappe auf Neue Projektmappe erstellen fest.Set Solution to Create new solution. Aktivieren Sie ggf. Projektmappenverzeichnis erstellen.Check Create directory for solution if it's unchecked.

    Screenshot des Visual Studio 2017-Dialogfelds „Neues Projekt“, in dem „MathLibrary“ im Textfeld „Name“ eingegeben istScreenshot of the Visual Studio 2017 New Project dialog box showing Math Library in the Name text box.

  3. Wählen Sie die Schaltfläche OK aus, um das Projekt zu erstellen.Choose the OK button to create the project.

Wenn die Projektmappe erstellt wird, sehen Sie das generierte Projekt und die Quelldateien in Visual Studio im Fenster Projektmappen-Explorer.When the solution is created, you can see the generated project and source files in the Solution Explorer window in Visual Studio.

Screenshot des Visual Studio 2017-Fensters „Projektmappen-Explorer“, in dem die MathLibrary hervorgehoben istScreenshot of the Visual Studio 2017 Solution Explorer window with the Math Library highlighted.

So erstellen Sie ein DLL-Projekt in Visual Studio 2015 und älteren VersionenTo create a DLL project in Visual Studio 2015 and older versions

  1. Wählen Sie in der Menüleiste Datei > Neu > Projekt aus.On the menu bar, choose File > New > Project.

  2. Erweitern Sie im linken Bereich des Dialogfelds Neues Projekt den Eintrag Installiert > Vorlagen, und wählen Sie Visual C++ aus. Klicken Sie dann im mittleren Bereich auf Win32-Konsolenanwendung.In the left pane of the New Project dialog box, expand Installed > Templates, and select Visual C++, and then in the center pane, select Win32 Console Application. Geben Sie MathLibrary in das Bearbeitungsfeld Name ein, um einen Namen für das Projekt anzugeben.Enter MathLibrary in the Name edit box to specify a name for the project. Behalten Sie die Standardwerte für Speicherort und Projektmappenname bei.Leave the default Location and Solution name values. Legen Sie Projektmappe auf Neue Projektmappe erstellen fest.Set Solution to Create new solution. Aktivieren Sie ggf. Projektmappenverzeichnis erstellen.Check Create directory for solution if it's unchecked.

    Screenshot des Visual Studio 2015-Dialogfelds „Neues Projekt“, in dem „MathLibrary“ im Textfeld „Name“ eingegeben istScreenshot of the Visual Studio 2015 New Project dialog box showing Math Library in the Name text box.

  3. Klicken Sie auf OK, um das Dialogfeld Neues Projekt zu schließen und den Win32-Anwendungs-Assistenten zu starten.Choose the OK button to dismiss the New Project dialog and start the Win32 Application Wizard.

    Übersicht über den Win32-Anwendungs-AssistentenWin32 Application Wizard Overview

  4. Klicken Sie auf Weiter.Choose the Next button. Wählen Sie auf der Seite Anwendungseinstellungen unter Anwendungstyp die Option DLL aus.On the Application Settings page, under Application type, select DLL.

    Erstellen einer DLL mit dem Win32-Anwendungs-AssistentenCreate DLL in Win32 Application Wizard

  5. Wählen Sie die Schaltfläche Fertig stellen , um das Projekt zu erstellen.Choose the Finish button to create the project.

Wenn der Assistent die Projektmappe erstellt hat, sehen Sie das generierte Projekt und die Quelldateien in Visual Studio im Fenster Projektmappen-Explorer.When the wizard completes the solution, you can see the generated project and source files in the Solution Explorer window in Visual Studio.

Screenshot des Visual Studio 2015-Fensters „Projektmappen-Explorer“, in dem die MathLibrary hervorgehoben istScreenshot of the Visual Studio 2015 Solution Explorer window with the Math Library highlighted.

Im Moment ist diese DLL noch nicht besonders nützlich.Right now, this DLL doesn't do very much. Als Nächstes erstellen Sie die Headerdatei, um die Funktionen zu deklarieren, die von der DLL exportiert werden. Danach fügen Sie die Funktionsdefinitionen zur DLL hinzu, um sie nützlicher zu machen.Next, you'll create a header file to declare the functions your DLL exports, and then add the function definitions to the DLL to make it more useful.

So fügen Sie der DLL eine Headerdatei hinzuTo add a header file to the DLL

  1. Um eine Headerdatei für Ihre Funktionen zu erstellen, wählen Sie auf der Menüleiste Projekt > Neues Element hinzufügen aus.To create a header file for your functions, on the menu bar, choose Project > Add New Item.

  2. Wählen Sie im linken Bereich des Dialogfelds Neues Element hinzufügen die Option Visual C++ aus.In the Add New Item dialog box, in the left pane, select Visual C++. Wählen Sie im mittleren Bereich die Option Headerdatei (.h) .In the center pane, select Header File (.h). Geben Sie MathLibrary.h als Namen für die Headerdatei an.Specify MathLibrary.h as the name for the header file.

    „Header hinzufügen“ im Dialogfeld „Neues Element hinzufügen“Add header in Add New Item dialog

  3. Klicken Sie auf die Schaltfläche Hinzufügen, um eine leere Headerdatei zu generieren, die in einem neuen Editor-Fenster angezeigt wird.Choose the Add button to generate a blank header file, which is displayed in a new editor window.

    Leere „MathLibrary.h“-Datei im EditorEmpty MathLibrary.h file in editor

  4. Ersetzen Sie den Inhalt der Headerdatei durch diesen Code:Replace the contents of the header file with this code:

    // MathLibrary.h - Contains declarations of math functions
    #pragma once
    
    #ifdef MATHLIBRARY_EXPORTS
    #define MATHLIBRARY_API __declspec(dllexport)
    #else
    #define MATHLIBRARY_API __declspec(dllimport)
    #endif
    
    // The Fibonacci recurrence relation describes a sequence F
    // where F(n) is { n = 0, a
    //               { n = 1, b
    //               { n > 1, F(n-2) + F(n-1)
    // for some initial integral values a and b.
    // If the sequence is initialized F(0) = 1, F(1) = 1,
    // then this relation produces the well-known Fibonacci
    // sequence: 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
    
    // Initialize a Fibonacci relation sequence
    // such that F(0) = a, F(1) = b.
    // This function must be called before any other function.
    extern "C" MATHLIBRARY_API void fibonacci_init(
        const unsigned long long a, const unsigned long long b);
    
    // Produce the next value in the sequence.
    // Returns true on success and updates current value and index;
    // false on overflow, leaves current value and index unchanged.
    extern "C" MATHLIBRARY_API bool fibonacci_next();
    
    // Get the current value in the sequence.
    extern "C" MATHLIBRARY_API unsigned long long fibonacci_current();
    
    // Get the position of the current value in the sequence.
    extern "C" MATHLIBRARY_API unsigned fibonacci_index();
    

Diese Headerdatei deklariert einige Funktionen, um mit zwei Anfangswerten eine generalisierte Fibonacci-Folge zu erstellen.This header file declares some functions to produce a generalized Fibonacci sequence, given two initial values. Ein Aufruf von fibonacci_init(1, 1) generiert die bekannte Fibonacci-Zahlenfolge.A call to fibonacci_init(1, 1) generates the familiar Fibonacci number sequence.

Beachten Sie die Präprozessoranweisungen am Anfang der Datei.Notice the preprocessor statements at the top of the file. Die neue Projektvorlage für ein DLL-Projekt fügt den definierten Präprozessormakros PROJECTNAME_EXPORTS hinzu.The new project template for a DLL project adds PROJECTNAME_EXPORTS to the defined preprocessor macros. In diesem Beispiel definiert Visual Studio MATHLIBRARY_EXPORTS, wenn Ihr MathLibrary-DLL-Projekt erstellt wird.In this example, Visual Studio defines MATHLIBRARY_EXPORTS when your MathLibrary DLL project is built.

Wenn das MATHLIBRARY_EXPORTS-Makro definiert ist, legt das MATHLIBRARY_API-Makro den Modifizierer __declspec(dllexport) in den Funktionsdeklarationen fest.When the MATHLIBRARY_EXPORTS macro is defined, the MATHLIBRARY_API macro sets the __declspec(dllexport) modifier on the function declarations. Dieser Modifizierer weist den Compiler und Linker an, eine Funktion oder Variable aus der DLL zu exportieren, sodass sie von anderen Anwendungen verwendet werden kann.This modifier tells the compiler and linker to export a function or variable from the DLL for use by other applications. Wenn MATHLIBRARY_EXPORTS nicht definiert ist, weil beispielsweise die Headerdatei in einer Clientanwendung enthalten ist, wendet MATHLIBRARY_API den Modifizierer __declspec(dllimport) auf die Deklarationen an.When MATHLIBRARY_EXPORTS is undefined, for example, when the header file is included by a client application, MATHLIBRARY_API applies the __declspec(dllimport) modifier to the declarations. Dieser Modifizierer optimiert den Import der Funktion oder Variablen in eine Anwendung.This modifier optimizes the import of the function or variable in an application. Weitere Informationen finden Sie unter dllexport, dllimport.For more information, see dllexport, dllimport.

So fügen Sie der DLL eine Implementierung hinzuTo add an implementation to the DLL

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Knoten Quelldateien und dann auf Hinzufügen > Neues Element.In Solution Explorer, right-click on the Source Files node and choose Add > New Item. Erstellen Sie eine neue CPP-Datei namens MathLibrary.cpp auf die gleiche Art und Weise, wie Sie im vorherigen Schritt eine neue Headerdatei hinzugefügt haben.Create a new .cpp file called MathLibrary.cpp, in the same way that you added a new header file in the previous step.

  2. Wählen Sie im Editor-Fenster die Registerkarte für MathLibrary.cpp aus, wenn diese bereits geöffnet ist.In the editor window, select the tab for MathLibrary.cpp if it's already open. Andernfalls doppelklicken Sie im Projektmappen-Explorer auf die Datei MathLibrary.cpp im Ordner Quelldateien des Projekts MathLibrary, um es zu öffnen.If not, in Solution Explorer, double-click MathLibrary.cpp in the Source Files folder of the MathLibrary project to open it.

  3. Ersetzen Sie im Editor den Inhalt der Datei „MathLibrary.cpp“ durch den folgenden Code:In the editor, replace the contents of the MathLibrary.cpp file with the following code:

    // MathLibrary.cpp : Defines the exported functions for the DLL.
    #include "pch.h" // use stdafx.h in Visual Studio 2017 and earlier
    #include <utility>
    #include <limits.h>
    #include "MathLibrary.h"
    
    // DLL internal state variables:
    static unsigned long long previous_;  // Previous value, if any
    static unsigned long long current_;   // Current sequence value
    static unsigned index_;               // Current seq. position
    
    // Initialize a Fibonacci relation sequence
    // such that F(0) = a, F(1) = b.
    // This function must be called before any other function.
    void fibonacci_init(
        const unsigned long long a,
        const unsigned long long b)
    {
        index_ = 0;
        current_ = a;
        previous_ = b; // see special case when initialized
    }
    
    // Produce the next value in the sequence.
    // Returns true on success, false on overflow.
    bool fibonacci_next()
    {
        // check to see if we'd overflow result or position
        if ((ULLONG_MAX - previous_ < current_) ||
            (UINT_MAX == index_))
        {
            return false;
        }
    
        // Special case when index == 0, just return b value
        if (index_ > 0)
        {
            // otherwise, calculate next sequence value
            previous_ += current_;
        }
        std::swap(current_, previous_);
        ++index_;
        return true;
    }
    
    // Get the current value in the sequence.
    unsigned long long fibonacci_current()
    {
        return current_;
    }
    
    // Get the current index position in the sequence.
    unsigned fibonacci_index()
    {
        return index_;
    }
    
  1. Wählen Sie im Editor-Fenster die Registerkarte für MathLibrary.cpp aus, wenn diese bereits geöffnet ist.In the editor window, select the tab for MathLibrary.cpp if it's already open. Andernfalls doppelklicken Sie im Projektmappen-Explorer auf die Datei MathLibrary.cpp im Ordner Quelldateien des Projekts MathLibrary, um es zu öffnen.If not, in Solution Explorer, double-click MathLibrary.cpp in the Source Files folder of the MathLibrary project to open it.

  2. Ersetzen Sie im Editor den Inhalt der Datei „MathLibrary.cpp“ durch den folgenden Code:In the editor, replace the contents of the MathLibrary.cpp file with the following code:

    // MathLibrary.cpp : Defines the exported functions for the DLL.
    #include "stdafx.h" // use pch.h in Visual Studio 2019 and later
    #include <utility>
    #include <limits.h>
    #include "MathLibrary.h"
    
    // DLL internal state variables:
    static unsigned long long previous_;  // Previous value, if any
    static unsigned long long current_;   // Current sequence value
    static unsigned index_;               // Current seq. position
    
    // Initialize a Fibonacci relation sequence
    // such that F(0) = a, F(1) = b.
    // This function must be called before any other function.
    void fibonacci_init(
        const unsigned long long a,
        const unsigned long long b)
    {
        index_ = 0;
        current_ = a;
        previous_ = b; // see special case when initialized
    }
    
    // Produce the next value in the sequence.
    // Returns true on success, false on overflow.
    bool fibonacci_next()
    {
        // check to see if we'd overflow result or position
        if ((ULLONG_MAX - previous_ < current_) ||
            (UINT_MAX == index_))
        {
            return false;
        }
    
        // Special case when index == 0, just return b value
        if (index_ > 0)
        {
            // otherwise, calculate next sequence value
            previous_ += current_;
        }
        std::swap(current_, previous_);
        ++index_;
        return true;
    }
    
    // Get the current value in the sequence.
    unsigned long long fibonacci_current()
    {
        return current_;
    }
    
    // Get the current index position in the sequence.
    unsigned fibonacci_index()
    {
        return index_;
    }
    

Um zu überprüfen, ob alles funktioniert, kompilieren Sie die Dynamic Link Library.To verify that everything works so far, compile the dynamic link library. Wählen Sie hierzu auf der Menüleiste Erstellen > Projektmappe erstellen aus.To compile, choose Build > Build Solution on the menu bar. Die DLL und die zugehörige Compilerausgabe werden in einem Ordner namens Debuggen direkt unterhalb des Projektmappenordners abgelegt.The DLL and related compiler output are placed in a folder called Debug directly below the solution folder. Wenn Sie einen Releasebuild erstellen, wird die Ausgabe in einen Ordner namens Release abgelegt.If you create a Release build, the output is placed in a folder called Release. Die Ausgabe sollte ungefähr wie folgt aussehen:The output should look something like this:

1>------ Build started: Project: MathLibrary, Configuration: Debug Win32 ------
1>pch.cpp
1>dllmain.cpp
1>MathLibrary.cpp
1>Generating Code...
1>   Creating library C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.lib and object C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.exp
1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.dll
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
1>------ Build started: Project: MathLibrary, Configuration: Debug Win32 ------
1>stdafx.cpp
1>dllmain.cpp
1>MathLibrary.cpp
1>Generating Code...
1>   Creating library C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.lib and object C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.exp
1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.dll
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
1>------ Build started: Project: MathLibrary, Configuration: Debug Win32 ------
1>MathLibrary.cpp
1>dllmain.cpp
1>Generating Code...
1>   Creating library C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.lib and object C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.exp
1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.dll
1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.pdb (Partial PDB)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Herzlichen Glückwunsch! Sie haben mit Visual Studio eine DLL erstellt.Congratulations, you've created a DLL using Visual Studio! Als Nächstes erstellen Sie eine Client-App, die die von der DLL exportierten Funktionen verwendet.Next, you'll create a client app that uses the functions exported by the DLL.

Erstellen einer Client-App, die die DLL verwendetCreate a client app that uses the DLL

Überlegen Sie beim Erstellen einer DLL, wie Client-Apps diese verwenden.When you create a DLL, think about how client apps may use it. Clientquellcode muss zur Kompilierzeit über die Deklarationen verfügen, um die Funktionen aufzurufen oder auf die von einer DLL exportierten Daten zuzugreifen.To call the functions or access the data exported by a DLL, client source code must have the declarations available at compile time. Zur Linkzeit benötigt der Linker Informationen zum Auflösen von Funktionsaufrufen oder Datenzugriffen.At link time, the linker requires information to resolve the function calls or data accesses. Eine DLL stellt diese Informationen in einer Importbibliothek bereit. Diese Datei enthält Informationen zur Suche nach den Funktionen und Daten anstelle des eigentlichen Codes.A DLL supplies this information in an import library, a file that contains information about how to find the functions and data, instead of the actual code. Zur Laufzeit muss die DLL dem Client an einem Speicherort zur Verfügung stehen, den das Betriebssystem finden kann.And at run time, the DLL must be available to the client, in a location that the operating system can find.

Unabhängig davon, ob es sich um Ihre eigene oder eine DLL von einem Drittanbieter handelt, benötigt Ihr Client-App-Projekt mehrere Informationen, um diese DLL zu verwenden.Whether it's your own or from a third-party, your client app project needs several pieces of information to use a DLL. Es muss nach den Headern gesucht werden, die die DLL-Exporte, die Importbibliotheken für den Linker und die DLL selbst deklarieren.It needs to find the headers that declare the DLL exports, the import libraries for the linker, and the DLL itself. Eine Möglichkeit besteht darin, all diese Dateien in Ihr Clientprojekt zu kopieren.One solution is to copy all of these files into your client project. Da Drittanbieter-DLLs sich während der Entwicklung Ihres Clients wahrscheinlich nicht ändern, ist diese Methode möglicherweise die beste.For third-party DLLs that are unlikely to change while your client is in development, this method may be the best way to use them. Wenn Sie jedoch auch die DLL erstellen, sollten Sie eine Duplizierung besser vermeiden.However, when you also build the DLL, it's better to avoid duplication. Wenn Sie eine lokale Kopie der DLL-Dateien erstellen, die sich noch in der Entwicklungsphase befinden, könnte es passieren, dass Sie versehentlich eine Headerdatei nur in einer Kopie der DLL ändern oder eine veraltete Bibliothek verwenden.If you make a local copy of DLL files that are under development, you may accidentally change a header file in one copy but not the other, or use an out-of-date library.

Es empfiehlt sich, den Includepfad in Ihrem Clientprojekt so festzulegen, dass die DLL-Headerdateien direkt aus dem DLL-Projekt eingeschlossen werden, um nicht synchronen Code zu vermeiden.To avoid out-of-sync code, we recommend you set the include path in your client project to include the DLL header files directly from your DLL project. Legen Sie auch den Bibliothekspfad in Ihrem Clientprojekt so fest, dass die DLL-Importbibliotheken aus dem DLL-Projekt eingeschlossen sind.Also, set the library path in your client project to include the DLL import libraries from the DLL project. Zum Schluss kopieren Sie die kompilierte DLL aus dem DLL-Projekt in das Clientbuildausgabeverzeichnis.And finally, copy the built DLL from the DLL project into your client build output directory. Mit diesem Schritt ermöglichen Sie es der Client-App, denselben DLL-Code zu verwenden.This step allows your client app to use the same DLL code you build.

So erstellen Sie eine Client-App in Visual StudioTo create a client app in Visual Studio

  1. Klicken Sie in der Menüleiste auf Datei > Neu > Projekt, um das Dialogfeld Neues Projekt erstellen zu öffnen.On the menu bar, choose File > New > Project to open the Create a new project dialog box.

  2. Legen Sie oben im Dialogfeld die Sprache auf C++ , die Plattform auf Windows und den Projekttyp auf Konsole fest.At the top of the dialog, set Language to C++, set Platform to Windows, and set Project type to Console.

  3. Wählen Sie aus der gefilterten Projekttypliste Konsolen-App aus, und klicken Sie auf Weiter.From the filtered list of project types, choose Console App then choose Next.

  4. Geben Sie auf der Seite Neues Projekt konfigurieren in das Feld Projektname den Namen MathClient ein, um einen Namen für das Projekt festzulegen.In the Configure your new project page, enter MathClient in the Project name box to specify a name for the project. Behalten Sie die Standardwerte für Speicherort und Projektmappenname bei.Leave the default Location and Solution name values. Legen Sie Projektmappe auf Neue Projektmappe erstellen fest.Set Solution to Create new solution. Deaktivieren Sie bei Bedarf die Option Legen Sie die Projektmappe und das Projekt im selben Verzeichnis ab.Uncheck Place solution and project in the same directory if it's checked.

    Screenshot des Dialogfelds „Neues Projekt erstellen“, in dem die Option „Konsolenanwendung“ hervorgehoben istScreenshot of the Create a new project dialog box with the Console App option highlighted.

  5. Klicken Sie auf die Schaltfläche Erstellen, um das Clientprojekt zu erstellen.Choose the Create button to create the client project.

Es wird ein kleines Konsolenanwendungsprojekt für Sie erstellt.A minimal console application project is created for you. Der Name der Hauptquelldatei ist derselbe wie der Projektname, den Sie zuvor eingegeben haben.The name for the main source file is the same as the project name that you entered earlier. In diesem Beispiel lautet der Name MathClient.cpp.In this example, it's named MathClient.cpp. Sie können die App kompilieren, aber verwenden Sie noch nicht Ihre DLL.You can build it, but it doesn't use your DLL yet.

So erstellen Sie eine Client-App in Visual Studio 2017To create a client app in Visual Studio 2017

  1. Klicken Sie auf der Menüleiste auf Datei > Neu > Projekt, um eine C++-App zu erstellen, die die erstellte DLL verwendet.To create a C++ app that uses the DLL that you created, on the menu bar, choose File > New > Project.

  2. Wählen Sie im linken Bereich des Dialogfelds Neues Projekt unter Installiert > Visual C++ den Eintrag Windows Desktop aus.In the left pane of the New Project dialog, select Windows Desktop under Installed > Visual C++. Klicken Sie im mittleren Bereich auf Windows-Konsolenanwendung.In the center pane, select Windows Console Application. Geben Sie MathClient als Projektnamen im Bearbeitungsfeld Name ein.Specify the name for the project, MathClient, in the Name edit box. Behalten Sie die Standardwerte für Speicherort und Projektmappenname bei.Leave the default Location and Solution name values. Legen Sie Projektmappe auf Neue Projektmappe erstellen fest.Set Solution to Create new solution. Aktivieren Sie ggf. Projektmappenverzeichnis erstellen.Check Create directory for solution if it's unchecked.

    Screenshot des Dialogfelds „Neues Projekt“, in dem „Installiert“ > „Visual C plus plus“ > „Windows-Desktop“ ausgewählt, „Windows-Konsolenanwendung“ hervorgehoben und im Textfeld „Name“ der Text „MathClient“ eingegeben ist.Screenshot of the New Project dialog box with Installed > Visual C plus plus > Windows Desktop selected, Windows Console Application highlighted, and Math Client typed in the Name text box.

  3. Klicken Sie auf OK, um das Client-App-Projekt zu erstellen.Choose OK to create the client app project.

Es wird ein kleines Konsolenanwendungsprojekt für Sie erstellt.A minimal console application project is created for you. Der Name der Hauptquelldatei ist derselbe wie der Projektname, den Sie zuvor eingegeben haben.The name for the main source file is the same as the project name that you entered earlier. In diesem Beispiel lautet der Name MathClient.cpp.In this example, it's named MathClient.cpp. Sie können die App kompilieren, aber verwenden Sie noch nicht Ihre DLL.You can build it, but it doesn't use your DLL yet.

So erstellen Sie eine Client-App in Visual Studio 2015To create a client app in Visual Studio 2015

  1. Klicken Sie auf der Menüleiste auf Datei > Neu > Projekt, um eine C++-App zu erstellen, die die erstellte DLL verwendet.To create a C++ app that uses the DLL that you created, on the menu bar, choose File > New > Project.

  2. Wählen Sie im linken Bereich des Dialogfelds Neues Projekt unter Installiert > Vorlagen > Visual C++ den Eintrag Win32 aus.In the left pane of the New Project dialog, select Win32 under Installed > Templates > Visual C++. Wählen Sie im mittleren Bereich Win32-Konsolenanwendung aus.In the center pane, select Win32 Console Application. Geben Sie MathClient als Projektnamen im Bearbeitungsfeld Name ein.Specify the name for the project, MathClient, in the Name edit box. Behalten Sie die Standardwerte für Speicherort und Projektmappenname bei.Leave the default Location and Solution name values. Legen Sie Projektmappe auf Neue Projektmappe erstellen fest.Set Solution to Create new solution. Aktivieren Sie ggf. Projektmappenverzeichnis erstellen.Check Create directory for solution if it's unchecked.

    Screenshot des Dialogfelds „Neues Projekt“, in dem „Installiert“ > „Vorlagen“ > „Visual C plus plus“ > „Win32“ ausgewählt, „Win32-Konsolenanwendung Visual C plus plus“ hervorgehoben und im Textfeld „Name“ der Text „MathClient“ eingegeben istScreenshot of the New Project dialog box with Installed > Templates > Visual C plus plus > Win32 selected, Win32 Console Application Visual C plus plus highlighted, and Math Client typed in the Name text box.

  3. Klicken Sie auf OK, um das Dialogfeld Neues Projekt zu schließen und den Win32-Anwendungs-Assistenten zu starten.Choose the OK button to dismiss the New Project dialog and start the Win32 Application Wizard. Wählen Sie auf der Seite Übersicht des Dialogfelds Win32-Anwendungs-Assistent die Schaltfläche Weiter .On the Overview page of the Win32 Application Wizard dialog box, choose the Next button.

  4. Wählen Sie auf der Seite Anwendungseinstellungen unter Anwendungstyp die Option Konsolenanwendung aus, falls diese nicht bereits ausgewählt ist.On the Application Settings page, under Application type, select Console application if it isn't already selected.

  5. Wählen Sie die Schaltfläche Fertig stellen , um das Projekt zu erstellen.Choose the Finish button to create the project.

Nach Abschluss des Assistenten wurde ein minimales Konsolenanwendungsprojekt für Sie erstellt.When the wizard finishes, a minimal console application project is created for you. Der Name der Hauptquelldatei ist derselbe wie der Projektname, den Sie zuvor eingegeben haben.The name for the main source file is the same as the project name that you entered earlier. In diesem Beispiel lautet der Name MathClient.cpp.In this example, it's named MathClient.cpp. Sie können die App kompilieren, aber verwenden Sie noch nicht Ihre DLL.You can build it, but it doesn't use your DLL yet.

Ihr Projekt muss die Datei MathLibrary.h enthalten, um als Nächstes die „MathLibrary“-Funktionen im Quellcode aufzurufen.Next, to call the MathLibrary functions in your source code, your project must include the MathLibrary.h file. Sie könnten diese Headerdatei in Ihr Client-App-Projekt kopieren und dann als vorhandenes Element zum Projekt hinzufügen.You could copy this header file into your client app project, then add it to the project as an existing item. Diese Methode ist für Drittanbieterbibliotheken möglicherweise eine gute Wahl.This method can be a good choice for third-party libraries. Wenn Sie jedoch gleichzeitig am Code für die DLL und den Client arbeiten, sind die Headerdateien möglicherweise nicht mehr synchron. Legen Sie die Einstellungen für den Pfad Zusätzliche Includeverzeichnisse in Ihrem Projekt so fest, dass der Pfad zum ursprünglichen Header eingeschlossen wird, um dieses Problem zu vermeiden.However, if you're working on the code for your DLL and your client at the same time, the header files could get out of sync. To avoid this issue, set the Additional Include Directories path in your project to include the path to the original header.

So fügen Sie den DLL-Header zum Includepfad hinzuTo add the DLL header to your include path

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Knoten MathClient, um das Dialogfeld Eigenschaftenseiten zu öffnen.Right-click on the MathClient node in Solution Explorer to open the Property Pages dialog.

  2. Klicken Sie im Dropdownfeld Konfiguration auf die Option Alle Konfigurationen, wenn diese nicht bereits ausgewählt ist.In the Configuration drop-down box, select All Configurations if it's not already selected.

  3. Klicken Sie im linken Bereich auf Konfigurationseigenschaften > C/C++ > Allgemein.In the left pane, select Configuration Properties > C/C++ > General.

  4. Wählen Sie im Eigenschaftenbereich das Dropdown-Steuerelement neben dem Bearbeitungsfeld für Zusätzliche Includeverzeichnisse aus, und klicken Sie auf Bearbeiten.In the property pane, select the drop-down control next to the Additional Include Directories edit box, and then choose Edit.

    Bearbeiten der Eigenschaft „Zusätzliche Includeverzeichnisse“Edit the Additional Include Directories property

  5. Doppelklicken Sie im oberen Bereich des Dialogfelds Zusätzliche Includeverzeichnisse, um ein Bearbeitungssteuerelement zu aktivieren.Double-click in the top pane of the Additional Include Directories dialog box to enable an edit control. Alternativ können Sie auf das Ordnersymbol klicken, um einen neuen Eintrag zu erstellen.Or, choose the folder icon to create a new entry.

  6. Geben Sie im Bearbeitungssteuerelement den Pfad zum Speicherort der Headerdatei MathLibrary.h an.In the edit control, specify the path to the location of the MathLibrary.h header file. Sie können auf das Steuerelement mit den drei Auslassungspunkten ( ... ) klicken, um zum richtigen Ordner zu navigieren.You can choose the ellipsis (...) control to browse to the correct folder.

    Sie können auch einen relativen Pfad von den Clientquelldateien zum Ordner eingeben, der die DLL-Headerdateien enthält.You can also enter a relative path from your client source files to the folder that contains the DLL header files. Wenn Sie die Anweisungen befolgt und Ihr Clientprojekt in einer anderen Projektmappe als die DLL abgelegt haben, sollte der relative Pfad wie folgt aussehen:If you followed the directions to put your client project in a separate solution from the DLL, the relative path should look like this:

    ..\..\MathLibrary\MathLibrary

    Wenn sich die DLL und die Clientprojekte in derselben Projektmappe befinden, könnte der relative Pfad folgendermaßen aussehen:If your DLL and client projects are in the same solution, the relative path might look like this:

    ..\MathLibrary

    Wenn sich die DLL und die Clientprojekte in anderen Ordnern befinden, passen Sie den relativen Pfad entsprechend an.When the DLL and client projects are in other folders, adjust the relative path to match. Sie können auch das Steuerelement mit den drei Auslassungspunkten verwenden, um nach dem Ordner zu suchen.Or, use the ellipsis control to browse for the folder.

    Hinzufügen des Headerspeicherorts zur Eigenschaft „Zusätzliche Includeverzeichnisse“Add the header location to the Additional Include Directories property

  7. Nachdem Sie den Pfad zur Headerdatei im Dialogfeld Zusätzliche Includeverzeichnisse eingegeben haben, klicken Sie auf die Schaltfläche OK.After you've entered the path to the header file in the Additional Include Directories dialog box, choose the OK button. Klicken Sie im Dialogfeld Eigenschaftenseiten auf die Schaltfläche OK, um Ihre Änderungen zu speichern.In the Property Pages dialog box, choose the OK button to save your changes.

Jetzt können Sie die Datei MathLibrary.h einschließen und die von dieser Datei deklarierten Funktionen in Ihrer Clientanwendung verwenden.You can now include the MathLibrary.h file and use the functions it declares in your client application. Ersetzen Sie den Inhalt von MathClient.cpp durch diesen Code:Replace the contents of MathClient.cpp by using this code:

// MathClient.cpp : Client app for MathLibrary DLL.
// #include "pch.h" Uncomment for Visual Studio 2017 and earlier
#include <iostream>
#include "MathLibrary.h"

int main()
{
    // Initialize a Fibonacci relation sequence.
    fibonacci_init(1, 1);
    // Write out the sequence values until overflow.
    do {
        std::cout << fibonacci_index() << ": "
            << fibonacci_current() << std::endl;
    } while (fibonacci_next());
    // Report count of values written before overflow.
    std::cout << fibonacci_index() + 1 <<
        " Fibonacci sequence values fit in an " <<
        "unsigned 64-bit integer." << std::endl;
}

Dieser Code kann kompiliert, jedoch nicht verknüpft werden.This code can be compiled, but not linked. Wenn Sie die Client-App jetzt erstellen, werden in der Fehlerliste mehrere LNK2019-Fehler angezeigt.If you build the client app now, the error list shows several LNK2019 errors. Das liegt daran, dass in Ihrem Projekt einige Informationen fehlen: Sie haben noch nicht angegeben, dass das Projekt eine Abhängigkeit von der MathLibrary.lib-Bibliothek aufweist.That's because your project is missing some information: You haven't specified that your project has a dependency on the MathLibrary.lib library yet. Außerdem haben Sie haben dem Linker nicht mitgeteilt, wie nach der Datei MathLibrary.lib gesucht werden soll.And, you haven't told the linker how to find the MathLibrary.lib file.

Sie können die Bibliotheksdatei direkt in Ihr Client-App-Projekt kopieren, um dieses Problem zu beheben.To fix this issue, you could copy the library file directly into your client app project. Der Linker findet und verwendet diese automatisch.The linker would find and use it automatically. Wenn sich aber sowohl Bibliothek als auch Client-App noch in der Entwicklungsphase befinden, könnte dies jedoch zu Änderungen in einer Kopie führen, die in der anderen nicht widergespiegelt werden.However, if both the library and the client app are under development, that might lead to changes in one copy that aren't shown in the other. Sie können die Eigenschaft Zusätzliche Abhängigkeiten festlegen, sodass dem Buildsystem mitgeteilt wird, dass Ihr Projekt von MathLibrary.lib abhängig ist, um dieses Problem zu vermeiden.To avoid this issue, you can set the Additional Dependencies property to tell the build system that your project depends on MathLibrary.lib. Außerdem können Sie in Ihrem Projekt den Pfad Zusätzliche Bibliotheksverzeichnisse festlegen, sodass bei der Verknüpfung der Pfad zur ursprünglichen Bibliothek eingeschlossen wird.And, you can set an Additional Library Directories path in your project to include the path to the original library when you link.

So fügen Sie die DLL-Importbibliothek zu Ihrem Projekt hinzuTo add the DLL import library to your project

  1. Klicken Sie mit der rechten Maustaste auf den Knoten MathClient im Projektmappen-Explorer, und klicken Sie dann auf Eigenschaften, um das Dialogfeld Eigenschaftenseiten zu öffnen.Right-click on the MathClient node in Solution Explorer and choose Properties to open the Property Pages dialog.

  2. Klicken Sie im Dropdownfeld Konfiguration auf die Option Alle Konfigurationen, wenn diese nicht bereits ausgewählt ist.In the Configuration drop-down box, select All Configurations if it's not already selected. Dadurch wird sichergestellt, dass alle Eigenschaftsänderungen für Debug- und Releasebuilds gelten.It ensures that any property changes apply to both Debug and Release builds.

  3. Klicken Sie im linken Bereich auf Konfigurationseigenschaften > Linker > Eingabe.In the left pane, select Configuration Properties > Linker > Input. Wählen Sie im Eigenschaftenbereich das Dropdown-Steuerelement neben dem Bearbeitungsfeld für Zusätzliche Abhängigkeiten aus, und klicken Sie auf Bearbeiten.In the property pane, select the drop-down control next to the Additional Dependencies edit box, and then choose Edit.

    Bearbeiten der Eigenschaft „Zusätzliche Abhängigkeiten“Edit the Additional Dependencies property

  4. Fügen Sie im Dialogfeld Zusätzliche Abhängigkeiten die Datei MathLibrary.lib zur Liste im oberen Bearbeitungssteuerelement hinzu.In the Additional Dependencies dialog, add MathLibrary.lib to the list in the top edit control.

    Hinzufügen der BibliotheksabhängigkeitAdd the library dependency

  5. Klicken Sie auf OK, um zum Dialogfeld Eigenschaftenseiten zurückzukehren.Choose OK to go back to the Property Pages dialog box.

  6. Klicken Sie im linken Bereich auf Konfigurationseigenschaften > Linker > Allgemein.In the left pane, select Configuration Properties > Linker > General. Wählen Sie im Eigenschaftenbereich das Dropdown-Steuerelement neben dem Bearbeitungsfeld für Zusätzliche Bibliotheksverzeichnisse aus, und klicken Sie auf Bearbeiten.In the property pane, select the drop-down control next to the Additional Library Directories edit box, and then choose Edit.

    Bearbeiten der Eigenschaft „Zusätzliche Bibliotheksverzeichnisse“Edit the Additional Library Directories property

  7. Doppelklicken Sie im oberen Bereich des Dialogfelds Zusätzliche Bibliotheksverzeichnisse, um ein Bearbeitungssteuerelement zu aktivieren.Double-click in the top pane of the Additional Library Directories dialog box to enable an edit control. Geben Sie im Bearbeitungssteuerelement den Pfad zum Speicherort der Datei MathLibrary.lib an.In the edit control, specify the path to the location of the MathLibrary.lib file. Standardmäßig befindet sich diese Datei in einem Ordner namens Debuggen direkt unter dem DLL-Projektmappenordner.By default, it's in a folder called Debug directly under the DLL solution folder. Wenn Sie einen Releasebuild erstellen, wird die Datei in einen Ordner namens Release abgelegt.If you create a release build, the file is placed in a folder called Release. Sie können das $(IntDir)-Makro verwenden, damit der Linker die DLL findet, unabhängig davon, welche Art von Build Sie erstellen.You can use the $(IntDir) macro so that the linker can find your DLL, no matter which kind of build you create. Wenn Sie die Anweisungen befolgt und Ihr Clientprojekt in einer anderen Projektmappe als das DLL-Projekt abgelegt haben, sollte der relative Pfad wie folgt aussehen:If you followed the directions to put your client project in a separate solution from the DLL project, the relative path should look like this:

    ..\..\MathLibrary\$(IntDir)

    Wenn sich die DLL und die Clientprojekte an anderen Speicherorten befinden, passen Sie den relativen Pfad entsprechend an.If your DLL and client projects are in other locations, adjust the relative path to match.

    Hinzufügen des BibliotheksverzeichnissesAdd the library directory

  8. Wenn Sie den Pfad zur Bibliotheksdatei im Dialogfeld Zusätzliche Bibliotheksverzeichnisse eingegeben haben, klicken Sie auf die Schaltfläche OK, um zum Dialogfeld Eigenschaftenseiten zurückzukehren.Once you've entered the path to the library file in the Additional Library Directories dialog box, choose the OK button to go back to the Property Pages dialog box. Klicken Sie auf OK, um die Änderungen an den Eigenschaften zu speichern.Choose OK to save the property changes.

Ihre Client-App kann jetzt erfolgreich kompiliert und verknüpft werden, aber noch sind nicht alle erforderlichen Komponenten für die Ausführung vorhanden.Your client app can now compile and link successfully, but it still doesn't have everything it needs to run. Wenn das Betriebssystem Ihre App lädt, sucht es nach der MathLibrary-DLL.When the operating system loads your app, it looks for the MathLibrary DLL. Wenn die DLL in bestimmten Systemverzeichnissen, dem Umgebungspfad oder dem lokalen App-Verzeichnis nicht gefunden wird, kann die App nicht geladen werden.If it can't find the DLL in certain system directories, the environment path, or the local app directory, the load fails. Abhängig vom Betriebssystem wird eine Fehlermeldung wie die folgende angezeigt:Depending on the operating system, you'll see an error message like this:

Fehlermeldung, dass MathLibrary-DLL nicht gefunden wurdeMathLibrary DLL not found error

Eine Möglichkeit zum Vermeiden dieses Problems besteht darin, die DLL in das Verzeichnis zu kopieren, das Ihre ausführbare Clientdatei als Bestandteil des Buildprozesses enthält.One way to avoid this issue is to copy the DLL to the directory that contains your client executable as part of the build process. Sie können Ihrem Projekt ein Postbuildereignis mit einem Befehl hinzufügen, der die DLL in Ihr Buildausgabeverzeichnis kopiert.You can add a Post-Build Event to your project, to add a command that copies the DLL to your build output directory. Der hier angegebene Befehl kopiert die DLL nur, wenn diese fehlt oder geändert wurde.The command specified here copies the DLL only if it's missing or has changed. Es werden Makros verwendet, um basierend auf der Buildkonfiguration in die bzw. aus den Debug- oder Releasespeicherorten zu kopieren.It uses macros to copy to and from the Debug or Release locations, based on your build configuration.

So kopieren Sie die DLL in einem PostbuildereignisTo copy the DLL in a post-build event

  1. Klicken Sie mit der rechten Maustaste auf den Knoten MathClient im Projektmappen-Explorer, und klicken Sie dann auf Eigenschaften, um das Dialogfeld Eigenschaftenseiten zu öffnen.Right-click on the MathClient node in Solution Explorer and choose Properties to open the Property Pages dialog.

  2. Wählen Sie im Dropdownfeld Konfiguration den Eintrag Alle Konfigurationen aus, falls dieser nicht bereits ausgewählt ist.In the Configuration drop-down box, select All Configurations if it isn't already selected.

  3. Klicken Sie im linken Bereich auf Konfigurationseigenschaften > Buildereignisse > Postbuildereignis.In the left pane, select Configuration Properties > Build Events > Post-Build Event.

  4. Klicken Sie im Eigenschaftenbereich auf das Bearbeitungssteuerelement im Feld Befehlszeile.In the property pane, select the edit control in the Command Line field. Wenn Sie die Anweisungen befolgt und Ihr Clientprojekt in einer anderen Projektmappe als das DLL-Projekt abgelegt haben, geben Sie diesen Befehl ein:If you followed the directions to put your client project in a separate solution from the DLL project, then enter this command:

    xcopy /y /d "..\..\MathLibrary\$(IntDir)MathLibrary.dll" "$(OutDir)"

    Wenn sich die DLL und die Clientprojekte in anderen Verzeichnissen befinden, ändern Sie den relativen Pfad zur DLL entsprechend.If your DLL and client projects are in other directories, change the relative path to the DLL to match.

    Hinzufügen des PostbuildbefehlsAdd the post-build command

  5. Klicken Sie auf die Schaltfläche OK, um die Änderungen an den Projekteigenschaften zu speichern.Choose the OK button to save your changes to the project properties.

Jetzt sind alle Elemente vorhanden, die benötigt werden, damit die Client-App kompiliert und ausgeführt werden kann.Now your client app has everything it needs to build and run. Kompilieren Sie die Anwendung, in dem Sie auf der Menüleiste Erstellen > Projektmappe erstellen auswählen.Build the application by choosing Build > Build Solution on the menu bar. Das Fenster Ausgabe in Visual Studio sollte in Abhängigkeit von der von Ihnen installierten Version von Visual Studio in etwa wie folgt aussehen:The Output window in Visual Studio should have something like the following example depending on your version of Visual Studio:

1>------ Build started: Project: MathClient, Configuration: Debug Win32 ------
1>MathClient.cpp
1>MathClient.vcxproj -> C:\Users\username\Source\Repos\MathClient\Debug\MathClient.exe
1>1 File(s) copied
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Herzlichen Glückwunsch: Sie haben eine Anwendung erstellt, die Funktionen in Ihrer DLL aufruft!Congratulations, you've created an application that calls functions in your DLL. Führen Sie Ihre Anwendung jetzt aus, um zu sehen, was passiert.Now run your application to see what it does. Klicken Sie in der Menüleiste auf Debuggen > Ohne Debuggen.On the menu bar, choose Debug > Start Without Debugging. Visual Studio öffnet ein Befehlsfenster, in dem das Programm ausgeführt wird.Visual Studio opens a command window for the program to run in. Der letzte Teil der Ausgabe sollte wie folgt aussehen:The last part of the output should look like:

Starten der Client-App ohne DebuggenStart the client app without debugging

Drücken Sie eine beliebige Taste, um das Befehlsfenster zu schließen.Press any key to dismiss the command window.

Sie haben eine DLL und eine Clientanwendung erstellt – nun können Sie damit experimentieren.Now that you've created a DLL and a client application, you can experiment. Legen Sie beispielsweise Haltepunkte im Code der Client-App fest, und führen Sie die App im Debugger aus.Try setting breakpoints in the code of the client app, and run the app in the debugger. Sehen Sie sich an, was passiert, wenn Sie einen Bibliotheksaufruf schrittweise ausführen.See what happens when you step into a library call. Fügen Sie der Bibliothek weitere Funktionen hinzu, oder schreiben Sie eine weitere Client-App, die Ihre DLL verwendet.Add other functions to the library, or write another client app that uses your DLL.

Wenn Sie Ihre App bereitstellen, müssen Sie auch die DLL bereitstellen, die von der App verwendet wird.When you deploy your app, you must also deploy the DLLs it uses. Die einfachste Möglichkeit, die von Ihnen erstellten oder von Drittanbietern eingeschlossenen DLLs zur Verfügung zu stellen, besteht darin, sie im gleichen Verzeichnis abzulegen, in dem sich auch Ihre App befindet.The simplest way to make the DLLs that you build, or that you include from third parties, available is to put them in the same directory as your app. Dies wird als lokale App-Bereitstellung bezeichnet.It's known as app-local deployment. Weitere Informationen zur Bereitstellung finden Sie unter Deployment in Visual C++.For more information about deployment, see Deployment in Visual C++.

Siehe auchSee also

Aufrufen von DLL-Funktionen aus Visual Basic-Anwendungen herausCalling DLL Functions from Visual Basic Applications