|
|
特集
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 記事ランキング
本日
月間