IDataModelManager::AcquireNamedModel 方法 (dbgmodel.h)
這會查閱已知的模型名稱,並傳回該名稱所註冊的數據模型。 請注意,如果沒有由提供的名稱註冊的模型,則會建立存根並傳回給呼叫端。
新增至存根的任何專案都會在進行註冊時新增至實際物件。
語法
HRESULT AcquireNamedModel(
PCWSTR modelName,
IModelObject **modelObject
);
參數
modelName
要查閱已註冊數據模型的名稱。
modelObject
在此會傳回 modelName 自變數所指定名稱下註冊的數據模型。 如果未註冊這類數據模型,將會建立存根物件,並暫時在 modelName 自變數所提供的名稱下註冊,並在此傳回。 如果發生這種情況,當實際物件透過呼叫 RegisterNamedModel 方法註冊時,對存根物件所做的變更實際上會移至實際數據模型。
傳回值
這個方法會傳回 HRESULT。
備註
想要擴充在指定名稱下註冊之數據模型的呼叫端會呼叫 AcquireNamedModel 方法,以擷取想要擴充之數據模型的物件。 這個方法會傳回任何透過 RegisterNamedModel 方法呼叫之前註冊的數據模型。
由於 AcquireNamedModel 方法的主要用途是擴充模型,如果尚未在指定名稱下註冊任何模型,則這個方法會有特殊行為。 如果尚未在指定名稱下註冊模型,則會建立存根對象、暫時在指定名稱下註冊,並傳回給呼叫端。 透過對 RegisterNamedModel 方法的呼叫來註冊實際數據模型時,對存根物件所做的任何變更,實際上就是對實際模型所做的變更。 這會從彼此擴充的元件中移除許多載入順序相依性問題。
範例程式碼
ComPtr<IDataModelManager> 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 |