IModelObject::AddParentModel 方法 (dbgmodel.h)
AddParentModel 方法會將新的父模型新增至指定的 物件。 這類模型可以在搜尋鏈結的結尾加入(覆寫自變數指定為 false),或在搜尋鏈結的前面新增(覆寫自變數指定為 true)。 此外,每個父模型可以選擇性地針對指定父系上的任何屬性或概念調整內容(語意此指標)。或在其父階層中的任何人。 很少使用內容調整,但允許一些強大的概念,例如物件內嵌、建構命名空間等等...
當父模型有內容調整時,核心數據模型將代表呼叫端自動執行這項調整。 實際上,對於父模型父系具有 newContext 內容調整器的物件實例,呼叫
instance->GetKeyValue("someKey", &pValue, nullptr);
最後會先將context/this指標從實例變更為newContext,再呼叫someKey的 GetValue 方法,因為存取透過內容調整器傳遞的someKey。
任何新增為父模型的IModelObject ,都必須個別支援 IDataModelConcept 概念。 無法實作這個概念可能會導致 AddParentModel 方法呼叫失敗。
語法
HRESULT AddParentModel(
IModelObject *model,
IModelObject *contextObject,
bool override
);
參數
model
IModelObject,這會新增至指定物件的父模型鏈結。 這個 IModelObject 必須個別支援 IDataModelConcept 概念。
contextObject
如果數據模型有與其相關聯的內容調整,可能會在這裡傳遞已調整的內容(或傳回調整內容的屬性存取子)。
override
指出model自變數所指定的父模型是否放在父模型之線性鏈結的前端或結尾。 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 |