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 vrai). En outre, chaque modèle parent peut éventuellement ajuster le contexte (le pointeur sémantique de ce pointeur) pour toute 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 des 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 pour le compte de l’appelant. En effet, pour une instance d’objet avec un parent de modèle parent ayant un ajusteur de contexte à newContext, un appel de
instance->GetKeyValue("someKey", &pValue, nullptr);
modifie le contexte/ce pointeur de l’instance en newContext avant d’appeler la méthode GetValue de someKey, car l’accès à someKey est passé par l’ajusteur de contexte.
Tout IModelObject qui est 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
Un IModelObject qui sera ajouté à la chaîne de modèle parent de l’objet donné. Ce IModelObject doit prendre en charge individuellement le concept IDataModelConcept.
contextObject
Si le modèle de données a un ajustement de contexte associé, 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 de 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 de retour
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.
}
}
Exigences
Exigence | Valeur |
---|---|
d’en-tête | dbgmodel.h |