次の方法で共有


IModelObject::SetContextForDataModel メソッド (dbgmodel.h)

SetContextForDataModel メソッドは、インスタンス オブジェクトに実装データを配置するためにデータ モデルの実装によって使用されます。 概念的には、IModelObject (わかりやすくするためにこのインスタンスを呼び出す) ごとに、状態のハッシュ テーブルが含まれています。 ハッシュ テーブルは、インスタンスの親モデル階層にある別の IModelObject (わかりやすくするためにこれをデータ モデルと呼びます) によってインデックスが作成されます。 このハッシュに含まれる値は、IUnknown インスタンスによって表される参照カウント状態情報のセットです。 データ モデルがインスタンスにこの状態を設定すると、プロパティゲッターなどの間に取得できる任意の実装データを格納できます。

多くの場合、拡張機能 (またはその他のデータ モデル コンポーネント) は、何らかの合成コンストラクトを型と見なすものとして表したいと考えています。 デバッガーによるプロセス オブジェクトの公開は、そのような例の 1 つです。 多くの場合、実装では型定義の概念がデータ モデルにマップされます。 データ モデルには、オブジェクトに公開されているモノのプロパティ ゲッター (プロセス名、プロセス ID、スレッド数、スレッドなど) が含まれます。このデータ モデルのインスタンスを作成するとき、空の合成オブジェクトが作成され、データ モデル (または型定義と考えられるもの) が親モデルとしてアタッチされます。 場合によっては、オブジェクトを一意に識別し、すべてのデータ モデルのプロパティ ゲッターを実装するのに十分な情報をインスタンス オブジェクトに直接配置できる場合があります。 このプロセス例では、プロセス ID がインスタンスの ID という名前のキーとして格納される場合があります。 たとえば、データ モデルのゲッターが呼び出されると、たとえばプロセス名に対して、実装は GetKeyValue メソッドを呼び出してプロセス ID をフェッチできます。名前を返すために必要な実装は、PID からこれを行うことができます。 その他の場合、型の実装に必要な状態がより複雑であるか、他のネイティブコンストラクトが含まれているか、または他の理由でインスタンス キーとして設定できません。 このような場合、データ モデルは IUnknown 派生クラスを構築し、このクラス内に実装データを配置し、インスタンスに対して SetContextForDataModel メソッドを呼び出して、その実装データをインスタンス オブジェクトに関連付けます。 インスタンスが破棄されると、状態クラスの参照カウントが解放され、必要に応じて解放されます

構文

HRESULT SetContextForDataModel(
  IModelObject *dataModelObject,
  IUnknown     *context
);

パラメーター

dataModelObject

IModelObject インスタンス オブジェクトに格納されている状態のデータ モデルを表します。 これは、実際には、関連付けられている状態オブジェクトのハッシュ キーです。

context

インスタンスに関連付けられている状態。 この (およびサポートされているその他のインターフェイスなど) の正確な意味は、この状態を設定する呼び出しを行うデータ モデルにかかっています。 唯一の要件は、このような状態が COM 参照カウントされるということです。

戻り値

このメソッドは、成功または失敗を示す HRESULT を返します。

備考

コード サンプル

ComPtr<IModelObject> spObject;          /* get an object */
ComPtr<IModelObject> spDataModelObject; /* get an attached data model (from earlier
                                           AddParentModel or from GetParentModel) anywhere in 
                                           the ancestor tree */

// Context data must be IUnknown derived.  Otherwise, implementation is opaque to the data model.
class MyContextData :
    public Microsoft::WRL::RuntimeClass<
        Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>,
        IUnknown
        >
{
    /* put whatever you want here */
};

ComPtr<MyContextData> spContextData = Microsoft::WRL::Make<MyContextData>();
if (SUCCEEDED(spObject->SetContextForDataModel(spDataModelObject.Get(), spContextData.Get())))
{
    // There is now context data associated with spObject (an instance) for 
    // spDataModelObject (a parent model).  This can be fetched via
    // GetContextForDataModel.  Note that spObject and spDataModelObject only need t
    // to be related.  The model does not need to be an immediate parent.
}

必要条件

要件 価値
ヘッダー dbgmodel.h

関連項目

IModelObject インターフェイス