|   | 
  | 
特集
Vista時代のVisual C++の流儀(後編)
STL/CLRによるDocument/Viewアーキテクチャ
επιστημη(えぴすてーめー) 
2007/05/11 | 
 | 
 
 | 
 cliext名前空間に属するクラス/関数はVisual C++ディレクトリ内の「include/cliext」ディレクトリにあるヘッダ・ファイルで、Microsoft::VisualC::StlClr名前空間に属するものは「lib」ディレクトリにあるMicrosoft.VisualC.STLCLR.dllアセンブリで提供されています。
 そこでお試しに先立って“Orcas”のVisual C++ディレクトリから、「include/cliext」ディレクトリ以下の全ヘッダ・ファイルをディレクトリごと、そして「lib」ディレクトリにあるMicrosoft.VisualC.STLCLR.dllを適当なディレクトリにコピーしておきます。
 C++/CLIでCLRクラス・ライブラリのプロジェクト「STLCLRlib」を作り、そのプロジェクトのプロパティ・ページの[共通プロパティ]−[参照設定]でMicrosoft.VisualC.STLCLR.dllを参照設定します。
 
  | 
 
| STLCLRlibプロジェクトのプロパティ・ページにおける「参照設定」 | 
 
| アセンブリの参照設定はプロジェクトのプロパティ・ページの[共通プロパティ]−[参照設定]から行う。プロパティ・ページはソリューション・エクスプローラで右クリックしてコンテキスト・メニューから[プロパティ]を選べば表示できる。 | 
 さらにプロパティ・ページの[構成プロパティ]−[C/C++]−[全般]で「追加のインクルード ディレクトリ」にcliextヘッダ・ファイルのあるディレクトリを、また「#using 参照の解決」にMicrosoft.VisualC.STLCLR.dllを置いたディレクトリを設定します。
 
  | 
 
| STLCLRlibプロジェクトのプロパティ・ページにおける「追加のインクルード ディレクトリ」と「#using参照の解決」の設定 | 
 
| 左のツリーから[構成プロパティ]−[C/C++]−[全般]を選択して設定を行う。 | 
 では簡単なC++/CLIアセンブリを書いてみましょう。
 
#include <cliext/vector> 
 
using namespace System; 
using namespace System::Collections::Generic; 
 
namespace STLCLRlib { 
  public ref class Utility { 
  public : 
    static IList<String^>^ make_ilist() { 
      cliext::vector<String^>^ result = 
        gcnew cliext::vector<String^>(); 
      result->push_back(L"first: initially exists."); 
      result->push_back(L"second: initially exists."); 
      return result; 
    } 
  }; 
}
 | 
 
 
 | 
 
| STL/CLRを活用した簡単なC++/CLIのソース・コード(STLCLRlib.cpp) | 
| STL/CLRのvector<T>テンプレート(cliext名前空間)のコンテナに「first: initially exists.」「second: initially exists.」という2つの文字列を追加している。 | 
 このアセンブリの利用者側(コンソール・アプリケーション)は、例えば以下のようになります。
 
using System; 
using System.Collections.Generic; 
 
namespace STLCLRuse { 
 
  class STLCLRuse { 
    static void Main(string[] args) { 
 
      // vector<string>テンプレートのオブジェクトを 
      // IList<string>インターフェイスのオブジェクトで受け取る 
      IList<string> ic = STLCLRlib.Utility.make_ilist(); 
 
      // IList<string>オブジェクトのメソッド 
      ic.Add("also added"); 
 
      // ICollection<string>オブジェクトのメソッド 
      int entries = ic.Count; 
      Console.WriteLine("{0} items in this vector.", entries); 
 
      // IEnumerableインターフェイスを利用してforeachで列挙 
      foreach (string item in ic) { 
        Console.WriteLine(item); 
      } 
    } 
  } 
}
 | 
 
 
 | 
 
| STL/CLRを使ったアセンブリを利用するためのC#のソース・コード(STLCLRusr.cs) | 
| C++/CLIで実装したSTL/CLRのvector<string>オブジェクトを.NETのIList<String>オブジェクトとして受け取り、そのIList<String>オブジェクトのAddメソッドで新たに「also added」という文字列を追加している。その後、コンテナ内のすべての要素をコンソール出力している。 | 
 以上で完成したサンプル・プログラムを実行したのが次の画面です。
 
  | 
 
| STL/CLRを活用したDocument/Viewアーキテクチャを持つサンプル・アプリケーションの実行 | 
 このようにSTL/CLRの登場によって、C++/CLI+STL/CLRでDocument側を作成し、C#でView側を作成して、Document/Viewアーキテクチャのスムーズなコンビネーションを実現できるようになります。
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間