IModelObject::AddParentModel 方法 (dbgmodel.h)
AddParentModel 方法會將新的父模型新增至指定的物件。 這類模型可以在搜尋鏈結結尾新增, (覆寫自變數指定為 false) ,或在搜尋鏈結的前面, (覆寫自變數指定為 true) 。 此外,每個父模型可以選擇性 (地針對指定父系 (或其父階層) 上任何屬性或概念的語意調整此指標語意) 。 內容調整很少使用,但允許一些功能強大的概念,例如物件內嵌、建構命名空間等等...
當父模型具有內容調整時,核心數據模型將代表呼叫端自動執行這項調整。 實際上,對於父模型父系具有 newContext 內容調整器的物件實例,呼叫
instance->GetKeyValue("someKey", &pValue, nullptr);
最後會先將內容/此指標從 實例變更為 newContext,再呼叫 someKey 的 GetValue 方法,因為存取透過內容調整器傳遞的 someKey。
任何新增為父模型的 IModelObject 都必須個別支援 IDataModelConcept 概念。 無法實作這個概念可能會導致 AddParentModel 方法呼叫失敗。
語法
HRESULT AddParentModel(
IModelObject *model,
IModelObject *contextObject,
bool override
);
參數
model
IModelObject,其會新增至指定物件的父模型鏈結。 此 IModelObject 必須個別支援 IDataModelConcept 概念。
contextObject
如果數據模型有與其相關聯的內容調整,則會在此傳遞調整的內容 (或屬性存取子,以傳回調整的內容) 。
override
指出模型自變數所指定的父模型是否放在父模型線性鏈結的前端或結尾。 (通常提供的值為 false) 表示鏈結的結尾。 true 的值表示鏈結的前方。
傳回值
這個方法會傳回 HRESULT,指出成功或失敗。
備註
** 程式代碼範例**
ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IModelObject> spObject; /* get an object */
// A data model *MUST* implement IDataModelConcept. Create an implementation of this and a string conversion.
class MyDataModel :
public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>,
IDataModelConcept,
IStringDisplayableConcept
>
{
public:
IFACEMETHOD(InitializeObject)(_In_ IModelObject * /*pModelObject*/,
_In_opt_ IDebugHostTypeSignature * /*pMatchingSignature*/,
_In_opt_ IDebugHostSymbolEnumerator * /*pWildcardMatches*/)
{
return S_OK;
}
IFACEMETHOD(GetName)(_Out_ BSTR *pModelName)
{
return E_NOTIMPL;
}
IFACEMETHOD(ToDisplayString)(_In_ IModelObject * /*pContextObject*/,
_In_opt_ IKeyStore * /*pMetadata */,
_Out_ BSTR *pDisplayString)
{
*pDisplayString = SysAllocString(L"Hello World");
return *pDisplayString == nullptr ? E_OUTOFMEMORY : S_OK;
}
};
// Create the data model, an object for it, set concepts, and add it as a parent to spObject.
ComPtr<MyDataModel> spDataModel = Microsoft::WRL::Make<MyDataModel>();
ComPtr<IModelObject> spDataModelObject;
if (spDataModel != nullptr &&
SUCCEEDED(spManager->CreateDataModelObject(spDataModel.Get(), &spDataModelObject)) &&
SUCCEEDED(spDataModelObject->SetConcept(__uuidof(IStringDisplayableConcept),
static_cast<IStringDisplayableConcept *>
(spDataModel.Get()),
nullptr)))
{
if (SUCCEEDED(spObject->AddParentModel(spDataModelObject.Get(), nullptr, false)))
{
// spObject has been *EXTENDED* to have a display string. It has a parent model
// which has that concept. That extension (and whatever else was added
// on spDataModelObject) can be removed with a single RemoveParentModel call.
}
}
規格需求
需求 | 值 |
---|---|
標頭 | dbgmodel.h |