IModelObject ::AddParentModel, méthode (dbgmodel.h)
La méthode AddParentModel ajoute un nouveau modèle parent à l’objet donné. Un tel modèle peut être ajouté à la fin de la chaîne de recherche (l’argument de remplacement est spécifié comme false) ou à l’avant de la chaîne de recherche (l’argument de remplacement est spécifié comme true). En outre, chaque modèle parent peut éventuellement ajuster le contexte (la sémantique de ce pointeur) pour n’importe quelle propriété ou concept sur le parent donné (ou toute personne dans sa hiérarchie parente). L’ajustement du contexte est rarement utilisé, mais permet certains concepts puissants tels que l’incorporation d’objets, la construction d’espaces de noms, etc...
Lorsqu’un modèle parent a un ajustement de contexte, le modèle de données de base effectue automatiquement cet ajustement au nom de l’appelant. En effet, pour un objet instance avec un parent de modèle parent ayant un ajusteur de contexte à newContext, un appel de
instance->GetKeyValue("someKey", &pValue, nullptr);
finit par modifier le contexte/ce pointeur de instance en newContext avant d’appeler la méthode GetValue de someKey depuis l’accès à someKey passé via l’ajusteur de contexte.
Tout IModelObject ajouté en tant que modèle parent à un autre objet doit prendre en charge individuellement le concept IDataModelConcept . L’échec de l’implémentation de ce concept peut entraîner l’échec de l’appel de méthode AddParentModel.
Syntaxe
HRESULT AddParentModel(
IModelObject *model,
IModelObject *contextObject,
bool override
);
Paramètres
model
IModelObject qui sera ajouté à la chaîne de modèle parente de l’objet donné. Cet IModelObject doit prendre en charge individuellement le concept IDataModelConcept .
contextObject
Si un ajustement de contexte est associé au modèle de données, le contexte ajusté (ou un accesseur de propriété qui retourne le contexte ajusté) peut être transmis ici.
override
Indique si le modèle parent spécifié par l’argument modèle est placé à l’avant ou à la fin de la chaîne linéaire des modèles parents. La valeur false (normalement fournie) indique la fin de la chaîne. La valeur true indique l’avant de la chaîne.
Valeur retournée
Cette méthode retourne HRESULT qui indique la réussite ou l’échec.
Remarques
** Exemple de code**
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.
}
}
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | dbgmodel.h |