チュートリアル: ダイナミック リンク ライブラリの作成と使用 (C++)

最初に作成するライブラリの種類は、ダイナミック リンク ライブラリ (DLL: Dynamic Link Library) です。 DLL を使用すると、コードを有効に再利用できます。 作成するプログラムごとに同じルーチンを再実装するのではなく、ルーチンを一度記述しておき、その機能を必要とするアプリケーションからそれらを参照します。

ここでは、次の内容について説明します。

  • 新しいダイナミック リンク ライブラリ (DLL) プロジェクトの作成。

  • ダイナミック リンク ライブラリへのクラスの追加。

  • ダイナミック リンク ライブラリを参照するアプリケーションの作成。

  • コンソール アプリケーションでのクラス ライブラリの機能の使用。

  • アプリケーションの実行。

必須コンポーネント

このトピックは、C++ 言語の基本を理解していることを前提としています。 C++ の学習を始めたばかりのユーザーには、『C++ Beginner's Guide』(Herb Schildt 著) をお勧めします。このガイドはオンラインで入手できます (https://go.microsoft.com/fwlink/?LinkId=115303)。

新しいダイナミック リンク ライブラリ (DLL) プロジェクトを作成するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [プロジェクトの種類] ペインで、[Visual C++][Win32] をクリックします。

  3. [テンプレート] ペインの [Win32 コンソール アプリケーション] をクリックします。

  4. プロジェクトに「MathFuncsDll」などの名前を付け、[プロジェクト名] フィールドに入力します。 ソリューションに「DynamicLibrary」などの名前を付け、[ソリューション名] フィールドに入力します。

  5. [OK] をクリックして、Win32 アプリケーション ウィザードを起動します。 [Win32 アプリケーション ウィザード] ダイアログ ボックスの [概要] ページで、[次へ] をクリックします。

  6. Win32 アプリケーション ウィザード[アプリケーションの設定] ページで、[アプリケーションの種類][dll] が使用できる場合はそれを選択し、[dll] が使用できない場合は [コンソール アプリケーション] を選択します。 Visual Studio の一部のバージョンは、ウィザードによる DLL プロジェクトの作成をサポートしていません。 これは、プロジェクトを DLL にコンパイルするように、後で変更できます。

  7. Win32 アプリケーション ウィザード[アプリケーションの設定] ページで、[追加のオプション][空のプロジェクト] を選択します。

  8. [完了] をクリックして、プロジェクトを作成します。

ダイナミック リンク ライブラリにクラスを追加するには

  1. 新しいクラスのヘッダー ファイルを作成するには、[プロジェクト] メニューの [新しい項目の追加] をクリックします。 [新しい項目の追加] ダイアログ ボックスが表示されます。 [カテゴリ] ペインで、[Visual C++][コード] をクリックします。 [テンプレート] ペインの [ヘッダー ファイル (.h)] をクリックします。 ヘッダー ファイルに「MathFuncsDll.h」などの名前を付け、[追加] をクリックします。 空白のファイルが表示されます。

  2. 加算、減算、乗算、除算などの一般的な数値演算を行うための、MyMathFuncs という名前の単純なクラスを追加します。 コードは次のようになります。

    // MathFuncsDll.h
    
    namespace MathFuncs
    {
        class MyMathFuncs
        {
        public:
            // Returns a + b
            static __declspec(dllexport) double Add(double a, double b);
    
            // Returns a - b
            static __declspec(dllexport) double Subtract(double a, double b);
    
            // Returns a * b
            static __declspec(dllexport) double Multiply(double a, double b);
    
            // Returns a / b
            // Throws DivideByZeroException if b is 0
            static __declspec(dllexport) double Divide(double a, double b);
        };
    }
    
  3. このコードのメソッド宣言にある __declspec(dllexport) 修飾子に注意してください。 これらの修飾子は、メソッドを DLL でエクスポートして、他のアプリケーションで利用できるようにします。 詳細については、「dllexport, dllimport」を参照してください。

  4. 新しいクラスのソース ファイルを作成するには、[プロジェクト] メニューの [新しい項目の追加] をクリックします。 [新しい項目の追加] ダイアログ ボックスが表示されます。 [カテゴリ] ペインで、[Visual C++][コード] をクリックします。 [テンプレート] ペインの [C++ ファイル (.cpp)] をクリックします。 ソース ファイルに「MathFuncsDll.cpp」などの名前を付け、[追加] をクリックします。 空白のファイルが表示されます。

  5. ソース ファイルに MyMathFuncs の機能を実装します。 コードは次のようになります。

    // MathFuncsDll.cpp
    // compile with: /EHsc /LD
    
    #include "MathFuncsDll.h"
    
    #include <stdexcept>
    
    using namespace std;
    
    namespace MathFuncs
    {
        double MyMathFuncs::Add(double a, double b)
        {
            return a + b;
        }
    
        double MyMathFuncs::Subtract(double a, double b)
        {
            return a - b;
        }
    
        double MyMathFuncs::Multiply(double a, double b)
        {
            return a * b;
        }
    
        double MyMathFuncs::Divide(double a, double b)
        {
            if (b == 0)
            {
                throw new invalid_argument("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    
  6. プロジェクトを DLL にビルドするには、[プロジェクト] メニューの [MathFuncsDll のプロパティ] をクリックします。 左ペインで、[構成プロパティ] の下の [全般] をクリックします。 右ペインで、[構成の種類][ダイナミック ライブラリ (.dll)] に変更します。 [OK] をクリックして、変更を保存します。

    注意

    コマンド ラインからプロジェクトをビルドする場合は、/LD コンパイラ オプションを使用して、出力ファイルが DLL になるように指定します。 詳細については、「/MD、/MT、/LD (ランタイム ライブラリの使用)」を参照してください。

  7. [ビルド] メニューの [ソリューションのビルド] をクリックし、ダイナミック リンク ライブラリをコンパイルします。 これにより、他のプログラムで使用できる DLL が作成されます。 DLL の詳細については、「DLL」を参照してください。

ダイナミック リンク ライブラリを参照するアプリケーションを作成するには

  1. 作成したダイナミック リンク ライブラリを参照して使用するアプリケーションを作成するには、[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [プロジェクトの種類] ペインで、[Visual C++][Win32] をクリックします。

  3. [テンプレート] ペインの [Win32 コンソール アプリケーション] をクリックします。

  4. プロジェクトに「MyExecRefsDll」などの名前を付け、[プロジェクト名] フィールドに入力します。 [ソリューション] の横のドロップダウン リストで、[ソリューションに追加] をクリックします。 これにより、ダイナミック リンク ライブラリと同じソリューションに新しいプロジェクトが追加されます。

  5. [OK] をクリックして、Win32 アプリケーション ウィザードを起動します。 [Win32 アプリケーション ウィザード] ダイアログ ボックスの [概要] ページで、[次へ] をクリックします。

  6. Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[アプリケーションの種類][コンソール アプリケーション] を選択します。

  7. Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[追加のオプション] の下にある [プリコンパイル済みヘッダー] チェック ボックスをオフにします。

  8. [完了] をクリックして、プロジェクトを作成します。

ダイナミック リンク ライブラリの機能をコンソール アプリケーションで使用するには

  1. 新しいコンソール アプリケーションを作成すると、空のプログラムが作成されます。 ソース ファイルの名前は、前の処理でプロジェクトに付けた名前と同じになります。 この例では、「MyExecRefsDll.cpp」という名前です。

  2. ダイナミック リンク ライブラリで作成された数値演算ルーチンを使用するには、ライブラリを参照する必要があります。 そのためには、ソリューション エクスプローラーで MyExecRefsDll プロジェクトを選択し、[プロジェクト] メニューの [参照] をクリックします。 [プロパティ ページ] ダイアログ ボックスで、[共通プロパティ] ノードを展開し、[Framework と参照] をクリックします。次に、[新しい参照の追加] ボタンをクリックします。 [参照] のダイアログ ボックスの詳細については、「[Framework と参照] ([<プロジェクト名> プロパティ ページ] ダイアログ ボックス - [共通プロパティ])」を参照してください。

  3. [参照の追加] ダイアログ ボックスが表示されます。 このダイアログ ボックスには、参照できるすべてのライブラリが表示されます。 [プロジェクト] タブでは、現在のソリューション内のすべてのプロジェクト、およびそれらに含まれるすべてのライブラリが表示されます。 [プロジェクト] タブで、[MathFuncsDll] をクリックします。 [OK] をクリックします。

  4. ダイナミック リンク ライブラリのヘッダー ファイルを参照するには、インクルード ディレクトリ パスを変更する必要があります。 このためには、[プロパティ ページ] ダイアログ ボックスで、[構成プロパティ] ノードを展開し、[C/C++] ノードを展開して、[全般] をクリックします。 [追加のインクルード ディレクトリ] の横に、MathFuncsDll.h ヘッダー ファイルへのパスを入力します。

  5. 実行可能ファイルは、実行時までダイナミック リンク ライブラリを読み込みません。 MathFuncsDll.dll の場所をシステムに指示する必要があります。 このためには、PATH 環境変数を使用します。 [プロパティ ページ] ダイアログ ボックスで、[構成プロパティ] ノードを展開し、[デバッグ] をクリックします。 [環境] の横に、「PATH=<MathFuncsDll.dll ファイルのパス>」のように入力します。ここで、<MathFuncsDll.dll のパス> は MathFuncsDll.dll の実際の場所に置き換えます。 [OK] をクリックして、すべての変更を保存します。

    注意

    実行可能ファイルを Visual Studio からではなくコマンド ラインから実行する場合は、コマンド プロンプトで「set PATH=%PATH%;<MathFuncsDll.dll ファイルのパス>」を実行して、手動で PATH 環境変数を更新する必要があります。ここで、<MathFuncsDll.dll ファイルのパス> は MathFuncsDll.dll の実際の場所に置き換えます。

  6. これで、MyMathFuncs クラスをこのアプリケーションで使用できます。 MyExecRefsDll.cpp の内容を次のコードに置き換えます。

    // MyExecRefsDll.cpp
    // compile with: /EHsc /link MathFuncsDll.lib
    
    #include <iostream>
    
    #include "MathFuncsDll.h"
    
    using namespace std;
    
    int main()
    {
        double a = 7.4;
        int b = 99;
    
        cout << "a + b = " <<
            MathFuncs::MyMathFuncs::Add(a, b) << endl;
        cout << "a - b = " <<
            MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
        cout << "a * b = " <<
            MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
        cout << "a / b = " <<
            MathFuncs::MyMathFuncs::Divide(a, b) << endl;
    
        return 0;
    }
    
  7. [ビルド] メニューの [ソリューションのビルド] をクリックして、実行可能ファイルをビルドします。

アプリケーションを実行するには

  1. MyExecRefsDll が既定のプロジェクトとして選択されていることを確認します。 ソリューション エクスプローラーで [MyExecRefsDll] を選択し、[プロジェクト] メニューの [スタートアップ プロジェクトに設定] をクリックします。

  2. プロジェクトを実行するには、[デバッグ] メニューの [デバッグなしで開始] を選択します。 出力は、次のようになります。

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

次の手順

前へ : 再利用可能なコードの作成 (C++) | 次へ : チュートリアル: スタティック ライブラリの作成と使用 (C++)

参照

処理手順

Visual C++ ガイド ツアー

チュートリアル: プログラムの配置 (C++)

概念

DLL

その他の技術情報

Visual C++ プログラミング手順

配置 (Visual C++)