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 |