IModelObject::SetContextForDataModel 方法 (dbgmodel.h)

SetContextForDataModel 方法由数据模型的实现用于在实例对象上放置实现数据。 从概念上讲,每个 IModelObject(为简单起见调用此实例)都包含一个哈希状态表。 哈希表由另一 IModelObject(为简单起见调用此数据模型)编制索引,该模型位于实例的父模型层次结构中。 此哈希中包含的值是一组由 IUnknown 实例表示的引用计数状态信息。 数据模型在实例上设置此状态后,它可以存储任意实现数据,这些实现数据可以在属性 getter 等内容中检索。

扩展(或其他数据模型组件)通常希望将一些综合构造表示为一种类型。 调试器公开进程对象就是这样一个示例。 通常,实现会将类型定义的概念映射到数据模型。 数据模型将包含对象上公开的内容的属性 getter(例如:进程名称、进程 ID、线程计数、线程数等...)。当创建此数据模型的实例时,将创建一个空白合成对象,并将数据模型(或我们认为类型定义)附加为父模型。 在某些情况下,足够的信息来唯一标识对象并实现所有数据模型的属性 getter 可能可以直接放置在实例对象上。 在我们的进程示例中,进程 ID 可能作为名为 ID 的密钥存储在实例上。 调用数据模型的 getter 时,例如,对于进程名称,例如,实现只需调用 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 接口