共用方式為


IDataModelManager3::AcquireNamedModel 方法 (dbgmodel.h)

AcquireNamedModel 會查閱已知的模型名稱,並傳回該名稱所註冊的數據模型。 請注意,如果沒有由提供的名稱註冊的模型,則會建立存根並傳回給呼叫端。

在註冊時,任何新增至存根的任何項目都會新增至實際物件。

語法

HRESULT AcquireNamedModel(
  PCWSTR       modelName,
  IModelObject **modelObject
);

參數

modelName

要查閱已註冊數據模型的名稱。

modelObject

這裡會傳回 modelName 自變數所指定名稱下註冊的數據模型。 如果未註冊這類數據模型,則會建立存根物件,並暫時在modelName自變數指定的名稱下註冊,並在這裏傳回。 如果發生這種情況,當實際對像是透過 RegisterNamedModel 方法的呼叫來註冊時,對存根物件所做的變更實際上會移至實際數據模型。

傳回值

此方法會傳回 HRESULT。

言論

想要擴充以指定名稱註冊之數據模型的呼叫端會呼叫 AcquireNamedModel 方法,以便擷取想要擴充之數據模型的物件。 這個方法會傳回任何透過 RegisterNamedModel 方法先前呼叫註冊的數據模型。

由於 AcquireNamedModel 方法的主要用途是擴充模型,如果尚未在指定名稱下註冊任何模型,這個方法就會有特殊行為。 如果尚未在指定名稱下註冊模型,則會建立存根對象、暫時在指定名稱下註冊,並傳回給呼叫端。 透過對 RegisterNamedModel 方法的呼叫來註冊實際數據模型時,對存根物件所做的任何變更實際上都是對實際模型所做的。 這會從彼此延伸的元件中移除許多載入順序相依性問題。

範例程式代碼

ComPtr<IDataModelManager3> spManager;    /* get the data model manager */
ComPtr<IModelObject> spExtensionModel;  /* create a data model object you want 
                                           to use as an extension (see
                                           CreateDataModelObject) */

// Get the process model so we can extend it
ComPtr<IModelObject> spProcessModel;
if (SUCCEEDED(spManager->AcquireNamedModel(L"Debugger.Models.Process", 
                                           &spProcessModel)))
{
    // We have the process model and can extend it.  Even if the name we queried 
    // for is *NOT* yet registered, we can extend what gets returned (a stub)
    // and the extensions on it will be moved to the real object 
    // once RegisterNamedModel() is called.
    if (SUCCEEDED(spProcessModel->AddParentModel(spExtensionModel.Get(), 
                                                 nullptr, 
                                                 false)))
    {
        // We have successfully extended the debugger's concept of a 
        // process with whatever we have in spExtensionModel!
    }
}

要求

要求 價值
標頭 dbgmodel.h

另請參閱

IDataModelManager3 介面