プロジェクトのモデリング
プロジェクトのオートメーションを実現する次のステップでは、標準のプロジェクト オブジェクト (Projects および ProjectItems
コレクション、Project
および ProjectItem オブジェクト、実装に固有の残りのオブジェクト) を実装します。 これらの標準オブジェクトは、Dteinternal.h ファイルで定義されています。 標準オブジェクトの実装は、BscPrj サンプルに用意されています。 これらのクラスをモデルとして使用して、他のプロジェクト タイプのプロジェクト オブジェクトと両立する独自の標準プロジェクト オブジェクトを作成できます。
オートメーション コンシューマーは、Solution("<UniqueProjName>")
および ProjectItems (n
) を呼び出せることを前提としています。ここで、n は、ソリューション内の特定のプロジェクトを取得するためのインデックス番号です。 このオートメーション呼び出しを行うと、環境では、ItemID パラメーターとして VSITEMID_ROOT が、VSHPROPID パラメーターとして VSHPROPID_ExtObject が渡されて、適切なプロジェクト階層で GetProperty が呼び出されます。 IVsHierarchy::GetProperty
により、実装したコア Project
インターフェイスを提供するオートメーション オブジェクトへの IDispatch
ポインターが返されます。
IVsHierarchy::GetProperty
の構文を次に示します。
HRESULT GetProperty (
VSITEMID
itemid
、
VSHPROPID
propid
、
VARIANT
*pvar
);
プロジェクトでは、入れ子に対応し、コレクションを使用して、プロジェクト項目のグループを作成します。 この階層構造は次のようになっています。
Projects
|- Project
|- ProjectItems (a collection of ProjectItem)
|- ProjectItem (single object) or ProjectItems (another collection)
入れ子とは、入れ子になったオブジェクトを ProjectItems
コレクションに含めることができるため、ProjectItem オブジェクトが同時に ProjectItems コレクションにもなれることを意味します。 基本的なプロジェクトのサンプルでは、この入れ子については説明しません。 Project
オブジェクトを実装して、オートメーション モデル全体の設計を特徴付けるツリー状の構造に参加します。
プロジェクト オートメーションは、次の図のパスに従います。
プロジェクトの自動化
Project
オブジェクトを実装しない場合でも、プロジェクトの名前のみを含む汎用の Project
オブジェクトが環境によって返されます。