チュートリアル: マネージ アセンブリの作成と使用 (C++)
マネージ アセンブリは、コードを効率的に再利用するために作成できるライブラリの一種です。 多くのプログラムで同じルーチンを再実装する代わりに、ルーチンを一度記述しておき、その機能を必要とするアプリケーションからそれらを参照します。
このチュートリアルでは、次の作業について説明します。
クラス ライブラリ プロジェクトの作成。
クラス ライブラリへのクラスの追加。
クラス ライブラリを参照するアプリケーションの作成。
アプリケーションでのクラス ライブラリの機能の使用。
アプリケーションの実行。
必須コンポーネント
このチュートリアルを完了するには、C++ 言語の基本を理解している必要があります。 C++ の学習を始めたばかりのユーザーには、『C++ Beginner's Guide』(Herb Schildt 著) をお勧めします。このガイドは、MSDN Web サイトの「Beginner Developer Learning Center (ビギナー デベロッパー ラーニング センター)」で入手できます。
クラス ライブラリ プロジェクトを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[プロジェクトの種類] ペインで、[Visual C++] の [CLR] をクリックします。
このグループのすべてのプロジェクトの種類により、共通言語ランタイム (CLR: Common Language Runtime) を対象とするプロジェクトが作成されます。
テンプレート ペインで [クラス ライブラリ] をクリックします。
[名前] ボックスにプロジェクトの名前を入力します。たとえば MathFuncsAssembly などです。 "ソリューション名" フィールドに、ソリューションの名前を入力します。たとえば ManagedAssemblies などです。
[OK] をクリックして、プロジェクトを作成します。
既定では、プロジェクトを作成する場合、そのプロジェクトはプリコンパイル済みヘッダーを使用するように設定されます。 MathFuncsAssembly プロジェクトのプリコンパイル済みヘッダーを無効にするには、ソリューション エクスプローラーでプロジェクトを選択し、[プロジェクト] メニューの [プロパティ] をクリックします。 [構成プロパティ] ノードを展開し、次に [C/C++] ノードを展開して、[プリコンパイル済みヘッダー] をクリックします。 [プリコンパイル済みヘッダーの作成/使用] の横の一覧で、[プリコンパイル済みヘッダーを使用しない] をクリックします。 [OK] をクリックして、変更を保存します。 詳細については、「プリコンパイル済みヘッダー ファイルの作成」を参照してください。
クラス ライブラリにクラスを追加するには
CLR クラス ライブラリを作成すると、ウィザードによって基本クラスが生成されます。 生成されるヘッダー ファイルとソース ファイルの両方が、プロジェクトの作成時にプロジェクトに対して指定した名前と同じ名前になります。 この例では、「MathFuncsAssembly.h」と「MathFuncsAssembly.cpp」という名前です。
MyMathFuncsAssembly という名前の基本クラスを使用して、MathFuncsAssembly.h の既存のコードを置換します。 このクラスは、加算、減算、乗算、除算などの一般的な数値演算を実行します。 コードは次の例のようになります。
// MathFuncsAssembly.h using namespace System; namespace MathFuncs { public ref class MyMathFuncs { public: // Returns a + b static double Add(double a, double b); // Returns a - b static double Subtract(double a, double b); // Returns a * b static double Multiply(double a, double b); // Returns a / b // Throws DivideByZeroException if b is 0 static double Divide(double a, double b); }; }
ソース ファイルに MyMathFuncs の機能を実装します。 コードは次の例のようになります。
// MathFuncsAssembly.cpp // compile with: /clr /LD #include "MathFuncsAssembly.h" 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 gcnew DivideByZeroException("b cannot be zero!"); } return a / b; } }
[ビルド] メニューの [ソリューションのビルド] をクリックし、クラス ライブラリをコンパイルします。 これにより、他のプログラムで使用できるダイナミック リンク ライブラリ (DLL: Dynamic Link Library) が作成されます。 DLL の詳細については、「DLL」を参照してください。
クラス ライブラリを参照するコンソール アプリケーションを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[プロジェクトの種類] ペインで、[Visual C++] の [CLR] をクリックします。
[テンプレート] ペインの [CLR コンソール アプリケーション] をクリックします。
[名前] ボックスにプロジェクトの名前を入力します。たとえば MyExecRefsAssembly などです。 [ソリューション] の横の一覧で [ソリューションに追加] をクリックして、クラス ライブラリが含まれているソリューションに新しいプロジェクトを追加します。
[OK] をクリックして、プロジェクトを作成します。
ソリューション エクスプローラーで MyExecRefsAssembly プロジェクトを選択し、[プロジェクト] メニューの [プロパティ] をクリックすることで、このプロジェクトのプリコンパイル済みヘッダーを無効にします。 [構成プロパティ] ノードを展開し、次に [C/C++] ノードを展開して、[プリコンパイル済みヘッダー] をクリックします。 [プリコンパイル済みヘッダーの作成/使用] の横の一覧で、[プリコンパイル済みヘッダーを使用しない] をクリックします。 [OK] をクリックして、変更を保存します。
ダイナミック リンク ライブラリの機能をコンソール アプリケーションで使用するには
CLR コンソール アプリケーションを作成すると、"Hello World" とコンソールに書き込むだけのプログラムがウィザードによって作成されます。 生成されるソース ファイルは、プロジェクトの作成時にプロジェクトに対して指定した名前と同じ名前になります。 この例では、「MyExecRefsAssembly.cpp」という名前です。
クラス ライブラリで作成された数値演算ルーチンを使用するには、それを参照する必要があります。 これを行うには、ソリューション エクスプローラーで MyExecRefsAssembly プロジェクトを選択し、[プロジェクト] メニューの [プロパティ] をクリックします。 [プロパティ ページ] ダイアログ ボックスで、[共通プロパティ] ノードを展開し、[Framework と参照] をクリックします。次に、[新しい参照の追加] をクリックします。 詳細については、「[Framework と参照] ([<プロジェクト名> プロパティ ページ] ダイアログ ボックス - [共通プロパティ])」を参照してください。
[参照の追加] ダイアログ ボックスには、参照できるすべてのライブラリが表示されます。 [.NET] タブでは、.NET Framework に含まれているライブラリが表示されます。 [COM] タブでは、コンピューター上のすべての COM コンポーネントが表示されます。 [プロジェクト] タブでは、現在のソリューション内のすべてのプロジェクト、およびそれらに含まれるすべてのライブラリが表示されます。 [プロジェクト] タブで、MathFuncsAssembly をクリックします。次に [OK] をクリックします。
注意
#using <MathFuncsAssembly.dll> のように、#using ディレクティブを使用してソース ファイルからアセンブリを直接参照できます。 詳細については、「#using Directive (C/C++)」を参照してください。
これで、MyMathFuncs クラスをこのアプリケーションで使用できます。 MyExecRefsAssembly.cpp で、次のコードを使用してファイル関数の内容を置き換えます。
// MyExecRefsAssembly.cpp // compile with: /clr /FUMathFuncsAssembly.dll using namespace System; int main(array<System::String ^> ^args) { double a = 7.4; int b = 99; Console::WriteLine("a + b = {0}", MathFuncs::MyMathFuncs::Add(a, b)); Console::WriteLine("a - b = {0}", MathFuncs::MyMathFuncs::Subtract(a, b)); Console::WriteLine("a * b = {0}", MathFuncs::MyMathFuncs::Multiply(a, b)); Console::WriteLine("a / b = {0}", MathFuncs::MyMathFuncs::Divide(a, b)); return 0; }
[ビルド] メニューの [ソリューションのビルド] をクリックして、実行可能ファイルをビルドします。
アプリケーションを実行するには
ソリューション エクスプローラーで MyExecRefsAssembly を選択し、次に [プロジェクト] メニューの [スタートアップ プロジェクトに設定] をクリックして、MyExecRefsAssembly が既定のプロジェクトとして選択されていることを確認します。
プロジェクトを実行するには、[デバッグ] メニューの [デバッグなしで開始] をクリックします。 出力は次の例のようになります。
a + b = 106.4 a - b = -91.6 a * b = 732.6 a / b = 0.0747474747474748
次の手順
前へ: チュートリアル: スタティック ライブラリの作成と使用 (C++) 次へ: 次の学習事項 (C++)