AddParentModel メソッドは、指定されたオブジェクトに新しい親モデルを追加します。 このようなモデルは、検索チェーンの末尾 (オーバーライド引数は false として指定されます) または検索チェーンの先頭 (オーバーライド引数は true として指定) に追加できます。 さらに、各親モデルは、必要に応じて、特定の親 (またはその親階層内のすべてのユーザー) のプロパティまたは概念のコンテキスト (このポインターのセマンティック) を調整できます。 コンテキスト調整はほとんど使用されませんが、オブジェクトの埋め込み、名前空間の構築などの強力な概念が可能になります。
親モデルにコンテキスト調整がある場合、コア データ モデルは呼び出し元に代わってこの調整を自動的に実行します。 実際には、newContext に対するコンテキスト調整機能を持つ親モデルの親を持つオブジェクト インスタンスの場合、
instance->GetKeyValue("someKey", &pValue, nullptr);
は、コンテキストアジャスタを介して渡された someKey へのアクセス以来、someKey の GetValue メソッドを呼び出す前に、コンテキスト/このポインターをインスタンスから newContext に変更することになります。
親モデルとして別のオブジェクトに追加される 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 |
関連項目
IModelObject インターフェイス の