この文書の現在のバージョンと選択したバージョンの差分を表示します。
clr:アセンブリ [2009/02/03 07:44] admin 作成 |
clr:アセンブリ [2013/12/23 09:08] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== アセンブリ ====== | ||
- | |||
- | assembly 最も簡単に言えば、アセンブリとは、C++/CLIコンパイラがはいた最終成果物である、exeやdllです。 .NETプログラミングでは、あるDLLアセンブリに存在する型を他のEXEアセンブリが容易に利用できるようになっています。ここではまず、DLLアセンブリを作成し、それをEXEアセンブリから利用します。 | ||
- | |||
- | まず、DLLアセンブリdllasem.dllを作成します。 | ||
- | |||
- | * [ファイル] - [新規作成] - [プロジェクト]を選択し、[新しいプロジェクト]ダイアログを表示します。 | ||
- | * [プロジェクトの種類]を"CLR", [テンプレート]を"クラスライブラリ",[プロジェクト名]に"dllasem"と入力してOKを押します。 | ||
- | * dllasem.hに以下のコードを入力します。 | ||
- | |||
- | <code cpp> | ||
- | // dllasem.h | ||
- | #pragma once | ||
- | using namespace System; | ||
- | namespace DllasemNS { | ||
- | public ref class DllasemCLASS | ||
- | { | ||
- | int a; | ||
- | int b; | ||
- | int c; | ||
- | public: | ||
- | DllasemCLASS(int a, int b, int c) { | ||
- | this->a = a; | ||
- | this->b = b; | ||
- | this->c = c; | ||
- | } | ||
- | int getA() {return a;} | ||
- | int getB() {return b;} | ||
- | int getC() {return c;} | ||
- | int getALL() { return a+b+c; } | ||
- | }; | ||
- | } | ||
- | </code> | ||
- | |||
- | * コンパイルする前に、ファイルの出力先を"C:CLILIB"に変更するため以下の作業を行います。 | ||
- | * [プロジェクト] - [dllasmのプロパティ]を選択して、ツリーから[構成プロパティ]-[リンカ]を選択します。 | ||
- | * 右ペインの[出力ファイル]を"C:CLILIB$(ProjectName).dll"と書き換えます。 | ||
- | * ビルドを実行し、C:CLILIB にdllasem.dllが作成されたことを確認します。 | ||
- | |||
- | 上記のコードで注目すべきところは、クラスDllasemCLASSがpublicとして定義されているところです、C++ではこのような構文はありませんが、publicとするとこのクラスが他のアセンブリ内から利用可能であることを示します。デフォルトはprivateです。 | ||
- | |||
- | 次にこのDLLを利用するEXEを作成します。 | ||
- | |||
- | * [ファイル] - [新規作成] - [プロジェクト]を選択し、[新しいプロジェクト]ダイアログを表示します。 | ||
- | * [プロジェクトの種類]を"CLR", [テンプレート]を"CLR コンソールアプリケーション",[プロジェクト名]に"exeasem"と入力してOKを押します。 | ||
- | * exeasem.cppに以下のコードを入力します。 | ||
- | |||
- | <code cpp> | ||
- | // exeasem.cpp : メイン プロジェクト ファイルです。 | ||
- | #include "stdafx.h" | ||
- | using namespace System; | ||
- | #using <dllasem.dll> | ||
- | using namespace DllasemNS; | ||
- | int main(array<System::String ^> ^args) | ||
- | { | ||
- | | ||
- | DllasemCLASS^ dllclass = gcnew DllasemCLASS(2,3,4); | ||
- | int a = dllclass->getA(); | ||
- | int b = dllclass->getB(); | ||
- | int c = dllclass->getC(); | ||
- | int all = dllclass->getALL(); | ||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | * 次に、[ツール] - [オプション] を選択します。 | ||
- | * [ディレクトリを表示するプロジェクト]ドロップダウンリストで[参照ファイル]を選択します。 | ||
- | * フォルダ"C:CLILIB"を追加します。 | ||
- | |||
- | 上記の作業によって、#usingの検索パスが追加されます。 | ||
- | |||
- | * 次にDLL同様ファイルの出力先を C:CLILIB に変更します。 | ||
- | * [プロジェクト] - [exeasemのプロパティ]を選択して、ツリーから[構成プロパティ]-[リンカ]を選択します。 | ||
- | * 右ペインの[出力ファイル]を"C:CLILIB$(ProjectName).exe"と書き換えます。 | ||
- | * ビルドを実行し、C:CLILIB にexeasem.exeが作成されたことを確認します。 | ||
- | |||
- | 以上で、exeasem.exeからdllasem.dllが利用できます。以上の作業で注意すべきは、exeasem.exeはビルドするときも、実行時もdllasem.dllが見えていなければならない、ということです。 |