Metodo IModelObject::AddParentModel (dbgmodel.h)

Il metodo AddParentModel aggiunge un nuovo modello padre all'oggetto specificato. Tale modello può essere aggiunto alla fine della catena di ricerca (l'argomento di override viene specificato come false) o all'inizio della catena di ricerca (l'argomento di override è specificato come true). Inoltre, ogni modello padre può facoltativamente modificare il contesto (questo puntatore semantico) per qualsiasi proprietà o concetto nell'elemento padre specificato (o chiunque nella gerarchia padre). La regolazione del contesto viene usata raramente, ma consente alcuni concetti potenti come incorporamento di oggetti, costruzione di spazi dei nomi e così via...

Quando un modello padre ha una regolazione del contesto, il modello di dati di base eseguirà automaticamente questa regolazione per conto del chiamante. In effetti, per un'istanza dell'oggetto con un padre del modello padre con un regolatore di contesto in newContext, una chiamata di

instance->GetKeyValue("someKey", &pValue, nullptr);

finisce per modificare il contesto/questo puntatore dall'istanza a newContext prima di chiamare il metodo GetValue di someKey perché l'accesso a someKey passato attraverso il regolazione del contesto.

Qualsiasi IModelObject aggiunto come modello padre a un altro oggetto deve supportare singolarmente il concetto IDataModelConcept . Se non si implementa questo concetto, la chiamata al metodo AddParentModel ha esito negativo.

Sintassi

HRESULT AddParentModel(
  IModelObject *model,
  IModelObject *contextObject,
  bool         override
);

Parametri

model

Oggetto IModelObject che verrà aggiunto alla catena di modelli padre dell'oggetto specificato. Questo IModelObject deve supportare singolarmente il concetto IDataModelConcept .

contextObject

Se al modello di dati è associata una regolazione del contesto, è possibile passare il contesto modificato (o una funzione di accesso di proprietà che restituisce il contesto modificato).

override

Indicazione del fatto che il modello padre specificato dall'argomento del modello sia posizionato all'inizio o alla fine della catena lineare dei modelli padre. Un valore false (normalmente fornito) indica la fine della catena. Il valore true indica la parte anteriore della catena.

Valore restituito

Questo metodo restituisce HRESULT che indica l'esito positivo o negativo.

Commenti

** Esempio di codice**



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.
    }
}

Requisiti

Requisito Valore
Intestazione dbgmodel.h

Vedi anche

Interfaccia IModelObject