チュートリアル: 独自のダイナミック リンク ライブラリを作成して使用する (C++)Walkthrough: Create and use your own Dynamic Link Library (C++)

このステップバイステップチュートリアルでは、Visual Studio IDE を使用して、Microsoft C++ (MSVC) で記述された独自のダイナミックリンクライブラリ (DLL) を作成する方法について説明します。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). 次に、別C++のアプリから DLL を使用する方法を示します。Then it shows how to use the DLL from another C++ app. Dll (UNIX ベースのオペレーティングシステムでは共有ライブラリとも呼ばれます) は、最も便利な種類の Windows コンポーネントの1つです。DLLs (also known as shared libraries in UNIX-based operating systems) are one of the most useful kinds of Windows components. これらは、コードとリソースを共有したり、アプリのサイズを縮小したりするための手段として使用できます。You can use them as a way to share code and resources, and to shrink the size of your apps. Dll を使用すると、アプリのサービスと拡張を簡単に行うことができます。DLLs can even make it easier to service and extend your apps.

このチュートリアルでは、いくつかの数値演算関数を実装する DLL を作成します。In this walkthrough, you'll create a DLL that implements some math functions. 次に、DLL の関数を使用するコンソールアプリを作成します。Then you'll create a console app that uses the functions from the DLL. また、Windows Dll で使用されるプログラミング手法と規約の概要についても説明します。You'll also get an introduction to some of the programming techniques and conventions used in Windows DLLs.

このチュートリアルでは、次の作業について説明します。This walkthrough covers these tasks:

  • Visual Studio で DLL プロジェクトを作成します。Create a DLL project in Visual Studio.

  • エクスポートされた関数と変数を DLL に追加します。Add exported functions and variables to the DLL.

  • Visual Studio でコンソール アプリ プロジェクトを作成します。Create a console app project in Visual Studio.

  • コンソール アプリで DLL からインポートした関数と変数を使います。Use the functions and variables imported from the DLL in the console app.

  • 完成したアプリを実行します。Run the completed app.

静的にリンクされたライブラリと同様、DLL は変数、関数、およびリソースを名前で_エクスポート_します。Like a statically linked library, a DLL exports variables, functions, and resources by name. クライアントアプリは、これらの変数、関数、およびリソースを使用するために名前を_インポート_します。A client app imports the names to use those variables, functions, and resources. 静的にリンクされるライブラリとは異なり、読み込み時または実行時に Windows によってアプリのインポートが DLL のエクスポートに結合されます。リンク時に結合するのではありません。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. これらの結合を行うには、標準 C++ コンパイル モデルには含まれていない補足情報が Windows に必要です。Windows requires extra information that isn't part of the standard C++ compilation model to make these connections. MSVC コンパイラには、この補足情報を提供するための Microsoft 固有の C++ 拡張機能がいくつか実装されています。The MSVC compiler implements some Microsoft-specific extensions to C++ to provide this extra information. これらの拡張機能について順次説明していきます。We explain these extensions as we go.

このチュートリアルでは 2 つの Visual Studio ソリューションを作成します。DLL を構築するものと、クライアント アプリを構築するものです。This walkthrough creates two Visual Studio solutions; one that builds the DLL, and one that builds the client app. DLL は、C の呼び出し規約を使用します。The DLL uses the C calling convention. プラットフォーム、呼び出し規約、およびリンク規約が一致する限り、他のプログラミング言語で記述されたアプリから呼び出すことができます。It can be called from apps written in other programming languages, as long as the platform, calling conventions, and linking conventions match. クライアント アプリでは、読み込み時に Windows によってアプリが DLL にリンクされる、"暗黙的リンク" を使います。The client app uses implicit linking, where Windows links the app to the DLL at load-time. このリンクを使うことで、静的にリンクされたライブラリの関数と同じように、DLL で指定した関数をアプリから呼び出すことができます。This linking lets the app call the DLL-supplied functions just like the functions in a statically linked library.

このチュートリアルでは一部の一般的な状況を扱っていません。This walkthrough doesn't cover some common situations. このコードでは、他のC++プログラミング言語による dll の使用については説明しません。The code doesn't show the use of C++ DLLs by other programming languages. リソースのみの dll を作成する方法、または明示的なリンクを使用して、読み込み時ではなく実行時に dll を読み込む方法については説明しません。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. MSVC と Visual Studio を使用してこれらすべてを行うことができます。Rest assured, you can use MSVC and Visual Studio to do all these things.

DLL に関する詳細情報へのリンクについては、「Visual Studio での C/C++ Dll の作成」をご覧ください。For links to more information about DLLs, see Create C/C++ DLLs in Visual Studio. 暗黙のリンクと明示的なリンクの詳細については、「使用するリンク方法を決定する」を参照してください。For more information about implicit linking and explicit linking, see Determine which linking method to use. C 言語リンケージ規則C++を使用するプログラミング言語で使用するための dll を作成する方法については、「 c 言語の実行可能ファイルで使用する関数のエクスポートC++ 」を参照してください。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. .NET 言語で使う DLL を作成する方法については、「DLL 関数の Visual Basic アプリケーションからの呼び出し方」をご覧ください。For information about how to create DLLs for use with .NET languages, see Calling DLL Functions from Visual Basic Applications.

必須コンポーネントPrerequisites

  • Microsoft Windows 7 またはそれ以降のバージョンを稼働しているコンピューター。A computer that runs Microsoft Windows 7 or later versions. 最適な開発作業のためには、Windows 10 をお勧めします。We recommend Windows 10 for the best development experience.
  • Visual Studio。A copy of Visual Studio. Visual Studio をダウンロードしてインストールする方法について詳しくは、「Visual Studio のインストール」をご覧ください。For information on how to download and install Visual Studio, see Install Visual Studio. インストーラーを実行するときに、 [C++ によるデスクトップ開発] ワークロードがオンになっていることを確認してください。When you run the installer, make sure that the Desktop development with C++ workload is checked. Visual Studio をインストールしたときにこのワークロードをインストールしていなくても問題ありません。Don't worry if you didn't install this workload when you installed Visual Studio. インストーラーをもう一度実行して、すぐにインストールできます。You can run the installer again and install it now.

    C++ によるデスクトップ開発Desktop development with C++

  • Visual Studio。A copy of Visual Studio. Visual Studio 2015 をダウンロードしてインストールする方法については、「 Visual studio 2015 のインストール」を参照してください。For information on how to download and install Visual Studio 2015, see Install Visual Studio 2015. 既定ではインストールされないC++ため、カスタムインストールを使用して、コンパイラとツールをインストールします。Use a Custom installation to install the C++ compiler and tools, since they're not installed by default.
  • Visual Studio IDE の使用に関する基本事項の理解。An understanding of the basics of using the Visual Studio IDE. 以前に Windows デスクトップ アプリを使ったことがあれば、おそらく問題ありません。If you've used Windows desktop apps before, you can probably keep up. 概要については、Visual Studio IDE の機能ツアーに関するページをご覧ください。For an introduction, see Visual Studio IDE feature tour.

  • 内容を理解するための、C++ 言語の基本に関する十分な理解。An understanding of enough of the fundamentals of the C++ language to follow along. あまり複雑な作業は行わないので、ご安心ください。Don't worry, we don't do anything too complicated.

注意

このチュートリアルでは、Visual Studio 2017 バージョン15.9 以降を使用していることを前提としています。This walkthrough assumes you're using Visual Studio 2017 version 15.9 or later. 以前のバージョンの Visual Studio 2017 では、コードテンプレートに欠陥があるか、別のユーザーインターフェイスダイアログが使用されていました。Some earlier versions of Visual Studio 2017 had defects in the code templates, or used different user interface dialogs. 問題を回避するには、Visual Studio インストーラーを使用して Visual Studio 2017 をバージョン15.9 以降に更新します。To avoid problems, use the Visual Studio Installer to update Visual Studio 2017 to version 15.9 or later.

DLL プロジェクトを作成するCreate the DLL project

この一連のタスクでは、DLL のプロジェクトを作成して、コードを追加し、ビルドします。In this set of tasks, you create a project for your DLL, add code, and build it. 最初に、Visual Studio IDE を起動して、必要に応じてサインインします。To begin, start the Visual Studio IDE, and sign in if you need to. 手順は、使用している Visual Studio のバージョンによって多少異なります。The instructions vary slightly depending on which version of Visual Studio you're using. このページの左上のコントロールで適切なバージョンを選択していることを確認してください。Make sure you have the correct version selected in the control in the upper left of this page.

Visual Studio 2019 で DLL プロジェクトを作成するにはTo create a DLL project in Visual Studio 2019

  1. メニューバーで、 [ファイル] > [新規作成] > [プロジェクト] の順に選択して、 [新しいプロジェクトの作成] ダイアログ ボックスを開きます。On the menu bar, choose File > New > Project to open the Create a New Project dialog box.

    新しい DLL プロジェクトを作成するCreate a new DLL project

  2. ダイアログの上部で、 [言語][C++] に、 [プラットフォーム][Windows] に、 [プロジェクト タイプ][ライブラリ] に設定します。At the top of the dialog, set Language to C++, set Platform to Windows, and set Project type to Library.

  3. フィルター処理されたプロジェクトの種類の一覧から、 [ダイナミックリンクライブラリ (DLL)] を選択し、 [次へ] をクリックします。From the filtered list of project types, select Dynamic-link Library (DLL), and then choose Next.

  4. [新しいプロジェクトの構成] ページで、 [プロジェクト名] ボックスに「 MathLibrary 」と入力して、プロジェクトの名前を指定します。In the Configure your new project page, enter MathLibrary in the Project name box to specify a name for the project. 既定の [場所][ソリューション名] の値はそのままにします。Leave the default Location and Solution name values. ソリューション新しいソリューションを作成するように設定します。Set Solution to Create new solution. オンになっている場合は 、[ソリューションとプロジェクトを同じディレクトリに配置する] チェックボックスをオフにします。Uncheck Place solution and project in the same directory if it's checked.

  5. [作成] ボタンをクリックしてプロジェクトを作成します。Choose the Create button to create the project.

ソリューションが作成されると、Visual Studio の [ソリューションエクスプローラー] ウィンドウに生成されたプロジェクトとソースファイルが表示されます。When the solution is created, you can see the generated project and source files in the Solution Explorer window in Visual Studio.

Visual Studio での生成されたソリューションGenerated solution in Visual Studio

Visual Studio 2017 で DLL プロジェクトを作成するにはTo create a DLL project in Visual Studio 2017

  1. メニューバーで、 [ファイル] > [新規作成] > [プロジェクト] の順に選択して、 [新しいプロジェクト] ダイアログ ボックスを開きます。On the menu bar, choose File > New > Project to open the New Project dialog box.

  2. [新しいプロジェクト] ダイアログボックスの左ペインで、[インストール済み > > のC++Visual Windows デスクトップ] を選択します。In the left pane of the New Project dialog box, select Installed > Visual C++ > Windows Desktop. 中央のウィンドウで、 [ダイナミックリンクライブラリ (DLL)] を選択します。In the center pane, select Dynamic-Link Library (DLL). [名前] ボックスに「 MathLibrary 」と入力して、プロジェクトの名前を指定します。Enter MathLibrary in the Name box to specify a name for the project. 既定の [場所][ソリューション名] の値はそのままにします。Leave the default Location and Solution name values. ソリューション新しいソリューションを作成するように設定します。Set Solution to Create new solution. オフになっている場合は、ソリューションのディレクトリを作成します。Check Create directory for solution if it's unchecked.

    MathLibrary プロジェクトに名前を付けるName the MathLibrary project

  3. [OK] ボタンを選択すると、プロジェクトが作成されます。Choose the OK button to create the project.

ソリューションが作成されると、Visual Studio の [ソリューションエクスプローラー] ウィンドウに生成されたプロジェクトとソースファイルが表示されます。When the solution is created, you can see the generated project and source files in the Solution Explorer window in Visual Studio.

Visual Studio での生成されたソリューションGenerated solution in Visual Studio

Visual Studio 2015 およびそれ以前のバージョンで DLL プロジェクトを作成するにはTo create a DLL project in Visual Studio 2015 and older versions

  1. メニュー バーで、 [ファイル] > [新規作成] > [プロジェクト] の順に選択します。On the menu bar, choose File > New > Project.

  2. [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウで、 [インストール済み] > [テンプレート] を展開して [Visual C++] を選択してから、中央のウィンドウで [Win32 コンソール アプリケーション] を選択します。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. [名前] エディットボックスに「 MathLibrary 」と入力して、プロジェクトの名前を指定します。Enter MathLibrary in the Name edit box to specify a name for the project. 既定の [場所][ソリューション名] の値はそのままにします。Leave the default Location and Solution name values. ソリューション新しいソリューションを作成するように設定します。Set Solution to Create new solution. オフになっている場合は、ソリューションのディレクトリを作成します。Check Create directory for solution if it's unchecked.

    MathLibrary プロジェクトに名前を付けるName the MathLibrary project

  3. [OK] ボタンを選択して [新しいプロジェクト] ダイアログを閉じ、 [Win32 アプリケーション ウィザード] を起動します。Choose the OK button to dismiss the New Project dialog and start the Win32 Application Wizard.

    Win32 アプリケーション ウィザードの概要Win32 Application Wizard Overview

  4. [次へ] ボタンをクリックします。Choose the Next button. [アプリケーションの設定] ページの [アプリケーションの種類] の下で、 [DLL] を選択します。On the Application Settings page, under Application type, select DLL.

    Win32 アプリケーション ウィザードで DLL を作成するCreate DLL in Win32 Application Wizard

  5. [完了] をクリックすると、プロジェクトが作成されます。Choose the Finish button to create the project.

ウィザードでソリューションが完了したら、Visual Studio の [ソリューション エクスプローラー] ウィンドウで、生成されたプロジェクトとソース ファイルを確認できます。When the wizard completes the solution, you can see the generated project and source files in the Solution Explorer window in Visual Studio.

Visual Studio での生成されたソリューションGenerated solution in Visual Studio

現時点では、この DLL にはほとんど意味がありません。Right now, this DLL doesn't do very much. 次に、DLL によってエクスポートされる関数を宣言するヘッダーファイルを作成し、関数定義を DLL に追加して、さらに便利にします。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.

DLL にヘッダー ファイルを追加するにはTo add a header file to the DLL

  1. 関数のヘッダー ファイルを作成するには、メニュー バーで [プロジェクト] > [新しい項目の追加] の順に選択します。To create a header file for your functions, on the menu bar, choose Project > Add New Item.

  2. [新しい項目の追加] ダイアログ ボックスの左側のウィンドウで、 [Visual C++] を選択します。In the Add New Item dialog box, in the left pane, select Visual C++. 中央のウィンドウで、 [ヘッダー ファイル (.h)] をクリックします。In the center pane, select Header File (.h). ヘッダーファイルの名前としてMathLibraryを指定します。Specify MathLibrary.h as the name for the header file.

    [新しい項目の追加] ダイアログにヘッダーを追加するAdd header in Add New Item dialog

  3. [追加] ボタンを選択して空白のヘッダー ファイルを生成します。これは新しいエディター ウィンドウに表示されます。Choose the Add button to generate a blank header file, which is displayed in a new editor window.

    エディターの空の MathLibrary.h ファイルEmpty MathLibrary.h file in editor

  4. ヘッダー ファイルの内容を次のコードに置き換えます。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();
    

このヘッダー ファイルでは、2 つの初期値を指定して、一般化されたフィボナッチ数列を生成するための関数をいくつか宣言しています。This header file declares some functions to produce a generalized Fibonacci sequence, given two initial values. fibonacci_init(1, 1) を呼び出すと、有名なフィボナッチ数の数列が生成されます。A call to fibonacci_init(1, 1) generates the familiar Fibonacci number sequence.

ファイルの上部にあるプリプロセッサのステートメントに注目します。Notice the preprocessor statements at the top of the file. DLL プロジェクトの新しいプロジェクトテンプレートでは、定義済みのプリプロセッサマクロに PROJECTNAME_書き出す エクスポートを追加します。The new project template for a DLL project adds PROJECTNAME_EXPORTS to the defined preprocessor macros. この例では、Visual Studio によって、MathLibrary DLL プロジェクトのビルド時に MATHLIBRARY_EXPORTS が定義されます。In this example, Visual Studio defines MATHLIBRARY_EXPORTS when your MathLibrary DLL project is built.

MATHLIBRARY_EXPORTS マクロを定義すると、MATHLIBRARY_API マクロにより関数の宣言上で __declspec(dllexport) 修飾子が設定されます。When the MATHLIBRARY_EXPORTS macro is defined, the MATHLIBRARY_API macro sets the __declspec(dllexport) modifier on the function declarations. この修飾子は、他のアプリケーションで使用するために、DLL から関数または変数をエクスポートするようにコンパイラとリンカーに指示します。This modifier tells the compiler and linker to export a function or variable from the DLL for use by other applications. MATHLIBRARY_EXPORTS が未定義の場合 (たとえば、クライアント アプリケーションによってヘッダー ファイルが含まれる場合)、MATHLIBRARY_API によって宣言に __declspec(dllimport) 修飾子が適用されます。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. この修飾子によって、アプリケーションへの関数または変数のインポートが最適化されます。This modifier optimizes the import of the function or variable in an application. 詳細については、「dllexport、dllimport」をご覧ください。For more information, see dllexport, dllimport.

DLL に実装を追加するにはTo add an implementation to the DLL

  1. ソリューションエクスプローラーで、 [ソースファイル] ノードを右クリックし、[新しい項目追加 > ] を選択します。In Solution Explorer, right-click on the Source Files node and choose Add > New Item. 前の手順で新しいヘッダーファイルを追加したのと同じ方法で、 MathLibraryという名前の新しい .cpp ファイルを作成します。Create a new .cpp file called MathLibrary.cpp, in the same way that you added a new header file in the previous step.

  2. エディター ウィンドウで、既に開いている場合は MathLibrary.cpp のタブを選択します。In the editor window, select the tab for MathLibrary.cpp if it's already open. そうでない場合は、ソリューションエクスプローラーで、 MathLibraryプロジェクトの [Source Files] フォルダーにあるMathLibraryをダブルクリックして開きます。If not, in Solution Explorer, double-click MathLibrary.cpp in the Source Files folder of the MathLibrary project to open it.

  3. エディターで、MathLibrary.cpp ファイルの内容を次のコードに置き換えます。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. エディター ウィンドウで、既に開いている場合は MathLibrary.cpp のタブを選択します。In the editor window, select the tab for MathLibrary.cpp if it's already open. そうでない場合は、ソリューションエクスプローラーで、 MathLibraryプロジェクトの [Source Files] フォルダーにあるMathLibraryをダブルクリックして開きます。If not, in Solution Explorer, double-click MathLibrary.cpp in the Source Files folder of the MathLibrary project to open it.

  2. エディターで、MathLibrary.cpp ファイルの内容を次のコードに置き換えます。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_;
    }
    

今のところすべてが機能していることを確認するために、ダイナミック リンク ライブラリをコンパイルします。To verify that everything works so far, compile the dynamic link library. コンパイルするには、メニュー バーで [ビルド] > [ソリューションのビルド] の順に選択します。To compile, choose Build > Build Solution on the menu bar. DLL および関連するコンパイラ出力は、ソリューションフォルダーの直下にあるDebugというフォルダーに配置されます。The DLL and related compiler output are placed in a folder called Debug directly below the solution folder. リリースビルドを作成する場合、出力はreleaseというフォルダーに配置されます。If you create a Release build, the output is placed in a folder called Release. 出力は次のようになります。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 ==========

これで、Visual Studio を使用して DLL を作成できました。Congratulations, you've created a DLL using Visual Studio! 次は、DLL によってエクスポートされた関数を使用するクライアント アプリを作成します。Next, you'll create a client app that uses the functions exported by the DLL.

DLL を使用するクライアント アプリを作成するCreate a client app that uses the DLL

DLL を作成する場合は、クライアントアプリでの使用方法について検討してください。When you create a DLL, think about how client apps may use it. 関数を呼び出したり、DLL によってエクスポートされたデータにアクセスしたりするには、コンパイル時にクライアントのソースコードで宣言を使用できるようにする必要があります。To call the functions or access the data exported by a DLL, client source code must have the declarations available at compile time. リンク時に、リンカーは関数呼び出しまたはデータアクセスを解決するための情報を必要とします。At link time, the linker requires information to resolve the function calls or data accesses. DLL は、この情報をインポートライブラリに提供します。これには、実際のコードではなく、関数とデータを検索する方法に関する情報を含むファイルが含まれます。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. そして実行時に、オペレーティング システムによって見つけられる場所で、クライアントが DLL を利用できる必要があります。And at run time, the DLL must be available to the client, in a location that the operating system can find.

クライアントアプリプロジェクトは、独自のものでも、サードパーティ製でも、DLL を使用するためにいくつかの情報を必要とします。Whether it's your own or from a third-party, your client app project needs several pieces of information to use a DLL. DLL のエクスポートを宣言するヘッダー、リンカーのインポートライブラリ、および DLL 自体を検索する必要があります。It needs to find the headers that declare the DLL exports, the import libraries for the linker, and the DLL itself. 1つの解決策は、これらのすべてのファイルをクライアントプロジェクトにコピーすることです。One solution is to copy all of these files into your client project. クライアントの開発中に変更される可能性が低いサード パーティ製の DLL については、この方法がそれらを使うための最善の方法である場合があります。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. ただし、自分で DLL もビルドする場合は、重複を避けることをお勧めします。However, when you also build the DLL, it's better to avoid duplication. 開発中の DLL ファイルのローカルコピーを作成すると、誤って別のコピーではなく1つのコピーでヘッダーファイルを変更したり、古いライブラリを使用したりする可能性があります。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.

同期されていないコードを回避するには、dll プロジェクトから直接 DLL ヘッダーファイルをインクルードするために、クライアントプロジェクトにインクルードパスを設定することをお勧めします。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. また、クライアント プロジェクトのライブラリ パスを設定して、DLL プロジェクトから DLL インポート ライブラリをインクルードするようにします。Also, set the library path in your client project to include the DLL import libraries from the DLL project. 最後に、DLL プロジェクトから、ビルドされた DLL をクライアントビルド出力ディレクトリにコピーします。And finally, copy the built DLL from the DLL project into your client build output directory. この手順により、自分でビルドする同じ DLL のコードをクライアント アプリで使えます。This step allows your client app to use the same DLL code you build.

Visual Studio でクライアントアプリを作成するにはTo create a client app in Visual Studio

  1. メニューバーで [ファイル > ] [新規 >作成] [プロジェクト] の順に選択し、 [新しいプロジェクトの作成] ダイアログボックスを開きます。On the menu bar, choose File > New > Project to open the Create a new project dialog box.

  2. ダイアログの上部で、 [言語][C++] に、 [プラットフォーム][Windows] に、 [プロジェクト タイプ][コンソール] に設定します。At the top of the dialog, set Language to C++, set Platform to Windows, and set Project type to Console.

  3. フィルター処理されたプロジェクト タイプの一覧から、 [コンソール アプリ] を選択して、 [次へ] を選択します。From the filtered list of project types, choose Console App then choose Next.

  4. [新しいプロジェクトの構成] ページで、 [プロジェクト名] ボックスに「 MathClient 」と入力して、プロジェクトの名前を指定します。In the Configure your new project page, enter MathClient in the Project name box to specify a name for the project. 既定の [場所][ソリューション名] の値はそのままにします。Leave the default Location and Solution name values. ソリューション新しいソリューションを作成するように設定します。Set Solution to Create new solution. オンになっている場合は 、[ソリューションとプロジェクトを同じディレクトリに配置する] チェックボックスをオフにします。Uncheck Place solution and project in the same directory if it's checked.

    クライアント プロジェクトに名前を付けるName the client project

  5. [作成] ボタンを選択してクライアント プロジェクトを作成します。Choose the Create button to create the client project.

最小コンソールアプリケーションプロジェクトが作成されます。A minimal console application project is created for you. メイン ソース ファイルの名前は、以前に入力したプロジェクト名と同じです。The name for the main source file is the same as the project name that you entered earlier. この例では、MathClient.cpp という名前が付いています。In this example, it's named MathClient.cpp. これはビルドできますが、まだ DLL が使われていません。You can build it, but it doesn't use your DLL yet.

Visual Studio 2017 でクライアント アプリを作成するにはTo create a client app in Visual Studio 2017

  1. 作成した DLL を使用する C++ アプリを作成するには、メニュー バーで [ファイル] > [新規作成] > [プロジェクト] の順に選択します。To create a C++ app that uses the DLL that you created, on the menu bar, choose File > New > Project.

  2. [新しいプロジェクト] ダイアログの左側のウィンドウで、 [インストール済み] > [Visual C++] の下の [Windows デスクトップ] を選択します。In the left pane of the New Project dialog, select Windows Desktop under Installed > Visual C++. 中央のウィンドウで、 [Windows コンソールアプリケーション] を選択します。In the center pane, select Windows Console Application. [名前] ボックスに、プロジェクトの名前としてMathClientを指定します。Specify the name for the project, MathClient, in the Name edit box. 既定の [場所][ソリューション名] の値はそのままにします。Leave the default Location and Solution name values. ソリューション新しいソリューションを作成するように設定します。Set Solution to Create new solution. オフになっている場合は、ソリューションのディレクトリを作成します。Check Create directory for solution if it's unchecked.

    クライアント プロジェクトに名前を付けるName the client project

  3. [OK] を選択して、クライアントアプリプロジェクトを作成します。Choose OK to create the client app project.

最小コンソールアプリケーションプロジェクトが作成されます。A minimal console application project is created for you. メイン ソース ファイルの名前は、以前に入力したプロジェクト名と同じです。The name for the main source file is the same as the project name that you entered earlier. この例では、MathClient.cpp という名前が付いています。In this example, it's named MathClient.cpp. これはビルドできますが、まだ DLL が使われていません。You can build it, but it doesn't use your DLL yet.

Visual Studio 2015 でクライアントアプリを作成するにはTo create a client app in Visual Studio 2015

  1. 作成した DLL を使用する C++ アプリを作成するには、メニュー バーで [ファイル] > [新規作成] > [プロジェクト] の順に選択します。To create a C++ app that uses the DLL that you created, on the menu bar, choose File > New > Project.

  2. [新しいプロジェクト] ダイアログの左側のウィンドウで、 [インストール済み] > [テンプレート] > [Visual C++] の下の [Win32] を選択します。In the left pane of the New Project dialog, select Win32 under Installed > Templates > Visual C++. 中央のウィンドウで [Win32 コンソール アプリケーション] をクリックします。In the center pane, select Win32 Console Application. [名前] ボックスに、プロジェクトの名前としてMathClientを指定します。Specify the name for the project, MathClient, in the Name edit box. 既定の [場所][ソリューション名] の値はそのままにします。Leave the default Location and Solution name values. ソリューション新しいソリューションを作成するように設定します。Set Solution to Create new solution. オフになっている場合は、ソリューションのディレクトリを作成します。Check Create directory for solution if it's unchecked.

    クライアント プロジェクトに名前を付けるName the client project

  3. [OK] ボタンを選択して [新しいプロジェクト] ダイアログを閉じ、 [Win32 アプリケーション ウィザード] を起動します。Choose the OK button to dismiss the New Project dialog and start the Win32 Application Wizard. [Win32 アプリケーション ウィザード] ダイアログ ボックスの [概要] ページで、 [次へ] をクリックします。On the Overview page of the Win32 Application Wizard dialog box, choose the Next button.

  4. [アプリケーションの設定] ページの [アプリケーションの種類] の下で、 [コンソール アプリケーション] がまだ選択されていない場合はこれを選択します。On the Application Settings page, under Application type, select Console application if it isn't already selected.

  5. [完了] をクリックすると、プロジェクトが作成されます。Choose the Finish button to create the project.

ウィザードが完了したら、最小限のコンソール アプリケーション プロジェクトが自動的に作成されます。When the wizard finishes, a minimal console application project is created for you. メイン ソース ファイルの名前は、以前に入力したプロジェクト名と同じです。The name for the main source file is the same as the project name that you entered earlier. この例では、MathClient.cpp という名前が付いています。In this example, it's named MathClient.cpp. これはビルドできますが、まだ DLL が使われていません。You can build it, but it doesn't use your DLL yet.

次に、ソースコード内の MathLibrary 関数を呼び出すには、プロジェクトにMathLibraryファイルが含まれている必要があります。Next, to call the MathLibrary functions in your source code, your project must include the MathLibrary.h file. クライアント アプリ プロジェクトにこのヘッダー ファイルをコピーした後、既存のアイテムとしてこれをプロジェクトに追加することができます。You could copy this header file into your client app project, then add it to the project as an existing item. この方法は、サード パーティ製のライブラリに最適である場合があります。This method can be a good choice for third-party libraries. ただし、DLL とクライアントのコードを同時に操作している場合、ヘッダーファイルは同期されない可能性があります。この問題を回避するには、プロジェクトに [追加のインクルードディレクトリ] パスを設定し、元のヘッダーへのパスを含めます。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.

インクルード パスに DLL のヘッダーを追加するにはTo add the DLL header to your include path

  1. [ソリューション エクスプローラー][MathClient] ノードを右クリックして、 [プロパティ ページ] ダイアログを開きます。Right-click on the MathClient node in Solution Explorer to open the Property Pages dialog.

  2. [構成] ドロップダウンボックスで、 [すべての構成] を選択します (まだ選択されていない場合)。In the Configuration drop-down box, select All Configurations if it's not already selected.

  3. 左側のウィンドウで、[構成プロパティ > ] [CC++ > ]、 [全般] の順に選択します。In the left pane, select Configuration Properties > C/C++ > General.

  4. プロパティ ウィンドウで、 [追加のインクルード ディレクトリ] エディット ボックスの横にあるドロップダウン コントロールを選択してから、 [編集] を選択します。In the property pane, select the drop-down control next to the Additional Include Directories edit box, and then choose Edit.

    [追加のインクルード ディレクトリ] プロパティを編集するEdit the Additional Include Directories property

  5. [追加のインクルード ディレクトリ] ダイアログ ボックスの上部のウィンドウ内をダブルクリックして、編集コントロールを有効にします。Double-click in the top pane of the Additional Include Directories dialog box to enable an edit control. または、フォルダーアイコンをクリックして新しいエントリを作成します。Or, choose the folder icon to create a new entry.

  6. 編集コントロールで、MathLibrary.h ヘッダー ファイルの場所へのパスを指定します。In the edit control, specify the path to the location of the MathLibrary.h header file. 省略記号 ( ... ) コントロールを選択して、適切なフォルダーを参照できます。You can choose the ellipsis (...) control to browse to the correct folder.

    また、クライアントソースファイルから DLL ヘッダーファイルが格納されているフォルダーへの相対パスを入力することもできます。You can also enter a relative path from your client source files to the folder that contains the DLL header files. 指示に従って、DLL とは別のソリューションにクライアントプロジェクトを配置した場合、相対パスは次のようになります。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

    DLL とクライアントプロジェクトが同じソリューション内にある場合、相対パスは次のようになります。If your DLL and client projects are in the same solution, the relative path might look like this:

    ..\MathLibrary

    DLL プロジェクトとクライアントプロジェクトが他のフォルダーにある場合は、一致するように相対パスを調整します。When the DLL and client projects are in other folders, adjust the relative path to match. または、省略記号コントロールを使用してフォルダーを参照します。Or, use the ellipsis control to browse for the folder.

    [追加のインクルード ディレクトリ] プロパティにヘッダーの場所を追加するAdd the header location to the Additional Include Directories property

  7. [追加のインクルードディレクトリ] ダイアログボックスでヘッダーファイルへのパスを入力したら、 [OK] をクリックします。After you've entered the path to the header file in the Additional Include Directories dialog box, choose the OK button. [プロパティページ] ダイアログボックスで、 [OK] をクリックして変更を保存します。In the Property Pages dialog box, choose the OK button to save your changes.

これで MathLibrary.h ファイルをインクルードして、それで宣言した関数をクライアント アプリケーション内で使えるようになりました。You can now include the MathLibrary.h file and use the functions it declares in your client application. 次のコードを使って、MathClient.cpp の内容を置き換えます。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;
}

このコードはコンパイルできますが、リンクはできません。This code can be compiled, but not linked. クライアントアプリを今すぐビルドすると、エラー一覧に LNK2019 エラーがいくつか表示されます。If you build the client app now, the error list shows several LNK2019 errors. これは、プロジェクトにいくつかの情報が不足しているためです。プロジェクトがMathLibraryライブラリに対する依存関係をまだ持っていないことが指定されています。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. また、 MathLibraryファイルの検索方法をリンカーに指示していません。And, you haven't told the linker how to find the MathLibrary.lib file.

この問題を解決するには、ライブラリファイルをクライアントアプリプロジェクトに直接コピーします。To fix this issue, you could copy the library file directly into your client app project. リンカーは、このファイルを自動的に検索して使用します。The linker would find and use it automatically. ただし、ライブラリとクライアントアプリの両方が開発中である場合は、もう一方のコピーでは表示されない変更が生じる可能性があります。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. この問題を回避するには、 [追加の依存関係] プロパティを設定して、プロジェクトがMathLibraryに依存していることをビルドシステムに伝えます。To avoid this issue, you can set the Additional Dependencies property to tell the build system that your project depends on MathLibrary.lib. また、プロジェクトに追加のライブラリディレクトリパスを設定して、リンクするときに元のライブラリへのパスを含めることもできます。And, you can set an Additional Library Directories path in your project to include the path to the original library when you link.

プロジェクトに DLL インポート ライブラリを追加するにはTo add the DLL import library to your project

  1. ソリューションエクスプローラー[MathClient] ノードを右クリックし、 [プロパティ] をクリックして、 [プロパティページ] ダイアログを開きます。Right-click on the MathClient node in Solution Explorer and choose Properties to open the Property Pages dialog.

  2. [構成] ドロップダウンボックスで、 [すべての構成] を選択します (まだ選択されていない場合)。In the Configuration drop-down box, select All Configurations if it's not already selected. これにより、すべてのプロパティの変更がデバッグビルドとリリースビルドの両方に適用されます。It ensures that any property changes apply to both Debug and Release builds.

  3. 左側のウィンドウで、[構成プロパティ > ] [リンカー > 入力] を選択します。In the left pane, select Configuration Properties > Linker > Input. プロパティ ウィンドウで、 [追加の依存ファイル] エディット ボックスの横にあるドロップダウン コントロールを選択してから、 [編集] を選択します。In the property pane, select the drop-down control next to the Additional Dependencies edit box, and then choose Edit.

    [追加の依存ファイル] プロパティを編集するEdit the Additional Dependencies property

  4. [追加の依存関係] ダイアログで、上部の編集コントロールの一覧にMathLibraryを追加します。In the Additional Dependencies dialog, add MathLibrary.lib to the list in the top edit control.

    ライブラリ依存関係を追加するAdd the library dependency

  5. [OK] を選択して、 [プロパティ ページ] ダイアログ ボックスに戻ります。Choose OK to go back to the Property Pages dialog box.

  6. 左側のウィンドウで、[構成プロパティ > ] [リンカー > ] [全般] を選択します。In the left pane, select Configuration Properties > Linker > General. プロパティ ウィンドウで、 [追加のライブラリ ディレクトリ] エディット ボックスの横にあるドロップダウン コントロールを選択してから、 [編集] を選択します。In the property pane, select the drop-down control next to the Additional Library Directories edit box, and then choose Edit.

    [追加のライブラリ ディレクトリ] プロパティを編集するEdit the Additional Library Directories property

  7. [追加のライブラリ ディレクトリ] ダイアログ ボックスの上部のウィンドウ内をダブルクリックして、編集コントロールを有効にします。Double-click in the top pane of the Additional Library Directories dialog box to enable an edit control. 編集コントロールで、MathLibrary.lib ファイルの場所へのパスを指定します。In the edit control, specify the path to the location of the MathLibrary.lib file. 既定では、DLL ソリューションフォルダーの直下にあるDebugというフォルダーにあります。By default, it's in a folder called Debug directly under the DLL solution folder. リリースビルドを作成すると、ファイルはreleaseというフォルダーに配置されます。If you create a release build, the file is placed in a folder called Release. 作成したビルド$(IntDir)の種類に関係なく、リンカーが DLL を見つけることができるように、マクロを使用できます。You can use the $(IntDir) macro so that the linker can find your DLL, no matter which kind of build you create. 指示に従って、DLL プロジェクトとは別のソリューションにクライアントプロジェクトを配置した場合、相対パスは次のようになります。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)

    DLL とクライアントプロジェクトが同じソリューション内にある場合、相対パスは次のようになります。If your DLL and client projects are in the same solution, the relative path should look like this:

    ..\MathLibrary\$(IntDir)

    ライブラリ ディレクトリを追加するAdd the library directory

  8. [追加のライブラリ ディレクトリ] ダイアログ ボックスにライブラリ ファイルへのパスを入力したら、 [OK] ボタンを選択して [プロパティ ページ] ダイアログ ボックスに戻ります。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. [OK] を選択してプロパティの変更を保存します。Choose OK to save the property changes.

これでクライアント アプリを正常にコンパイルおよびリンクできるようになりましたが、実行のために必要なものはまだ何も含まれていません。Your client app can now compile and link successfully, but it still doesn't have everything it needs to run. オペレーティング システムによってアプリが読み込まれると、MathLibrary DLL が検索されます。When the operating system loads your app, it looks for the MathLibrary DLL. 特定のシステム ディレクトリ、環境パス、またはアプリのローカル ディレクトリに DLL が見つからない場合、読み込みは失敗します。If it can't find the DLL in certain system directories, the environment path, or the local app directory, the load fails. オペレーティングシステムによっては、次のようなエラーメッセージが表示されます。Depending on the operating system, you'll see an error message like this:

MATHLIBRARY DLL が見つかりませんエラーMathLibrary DLL not found error

この問題を回避する方法の 1 つは、ビルド プロセスの一環として、クライアントの実行可能ファイルが置かれているディレクトリに DLL をコピーすることです。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. ビルド後のイベントをプロジェクトに追加して、DLL をビルド出力ディレクトリにコピーするコマンドを追加できます。You can add a Post-Build Event to your project, to add a command that copies the DLL to your build output directory. ここで指定されたコマンドは、DLL が存在しないか変更されている場合にのみ DLL をコピーします。The command specified here copies the DLL only if it's missing or has changed. この例では、ビルド構成に基づいて、マクロを使用してデバッグまたはリリースの場所にコピーします。It uses macros to copy to and from the Debug or Release locations, based on your build configuration.

ビルド後のイベントで DLL をコピーするにはTo copy the DLL in a post-build event

  1. ソリューションエクスプローラー[MathClient] ノードを右クリックし、 [プロパティ] をクリックして、 [プロパティページ] ダイアログを開きます。Right-click on the MathClient node in Solution Explorer and choose Properties to open the Property Pages dialog.

  2. [構成] ドロップダウン ボックスで、 [すべての構成] がまだ選択されていない場合はこれを選択します。In the Configuration drop-down box, select All Configurations if it isn't already selected.

  3. 左側のウィンドウで、[構成プロパティ > ] [ビルドイベント > ] [ビルド後のイベント] を選択します。In the left pane, select Configuration Properties > Build Events > Post-Build Event.

  4. プロパティペインで、コマンドライン フィールドの 編集 コントロールを選択します。In the property pane, select the edit control in the Command Line field. 指示に従って、DLL プロジェクトとは別のソリューションにクライアントプロジェクトを配置した場合は、次のコマンドを入力します。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)"

    DLL とクライアントプロジェクトが同じソリューションディレクトリ内にある場合は、次のコマンドを入力します。If your DLL and client projects are in the same solution directory, then enter this command:

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

    ビルド後のコマンドを追加するAdd the post-build command

  5. [OK] ボタンを選択して、プロジェクト プロパティに変更を保存します。Choose the OK button to save your changes to the project properties.

これで、クライアント アプリのビルドと実行に必要なものがすべて揃いました。Now your client app has everything it needs to build and run. メニュー バーで [ビルド] > [ソリューションのビルド] の順に選択して、アプリケーションをビルドします。Build the application by choosing Build > Build Solution on the menu bar. Visual Studio の [出力] ウィンドウには、使用している visual studio のバージョンに応じて、次の例のようなものが表示されます。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 ==========

これで、DLL の関数を呼び出すアプリケーションの作成が完了しました。Congratulations, you've created an application that calls functions in your DLL. アプリケーションを実行してその動作を確認してみましょう。Now run your application to see what it does. メニュー バーで、 [デバッグ] > [デバッグなしで開始] の順に選択します。On the menu bar, choose Debug > Start Without Debugging. プログラムを実行するためのコマンド ウィンドウが Visual Studio により開かれます。Visual Studio opens a command window for the program to run in. 出力の最後の部分は次のようになります。The last part of the output should look like:

デバッグなしでクライアント アプリを開始するStart the client app without debugging

任意のキーを押して、コマンド ウィンドウを閉じます。Press any key to dismiss the command window.

DLL とクライアント アプリケーションを作成したので、実験を行えます。Now that you've created a DLL and a client application, you can experiment. クライアント アプリのコードにブレークポイントを設定して、デバッガーでアプリを実行してみます。Try setting breakpoints in the code of the client app, and run the app in the debugger. ライブラリの呼び出しにステップ インするときの動作を確認します。See what happens when you step into a library call. ライブラリに他の関数を追加するか、DLL を使用する別のクライアント アプリを作成します。Add other functions to the library, or write another client app that uses your DLL.

アプリを配置するときに、使われる DLL も配置する必要があります。When you deploy your app, you must also deploy the DLLs it uses. ビルドする Dll を作成したり、サードパーティからインクルードしたりする最も簡単な方法は、アプリと同じディレクトリに配置することです。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. これは、アプリローカル展開と呼ばれています。It's known as app-local deployment. 配置の詳細については、「 Deployment in Visual C++」を参照してください。For more information about deployment, see Deployment in Visual C++.

関連項目See also

DLL 関数の Visual Basic アプリケーションからの呼び出し方Calling DLL Functions from Visual Basic Applications