Freigeben über


IModelObject::AddParentModel-Methode (dbgmodel.h)

Die AddParentModel-Methode fügt dem angegebenen Objekt ein neues übergeordnetes Modell hinzu. Ein solches Modell kann am Ende der Suchkette (das Überschreibungsargument wird als false angegeben) oder am Anfang der Suchkette (das Überschreibungsargument wird als true angegeben) hinzugefügt werden. Darüber hinaus kann jedes übergeordnete Modell optional den Kontext (die Semantik dieses Zeigers) für jede Eigenschaft oder jedes Konzept für das angegebene übergeordnete Element (oder eine beliebige Person in seiner übergeordneten Hierarchie) anpassen. Kontextanpassung wird selten verwendet, ermöglicht aber einige leistungsstarke Konzepte wie Objekteinbettung, Erstellen von Namespaces usw.

Wenn ein übergeordnetes Modell über eine Kontextanpassung verfügt, führt das Kerndatenmodell diese Anpassung automatisch im Namen des Aufrufers durch. Für ein Objekt instance mit einem übergeordneten Modell, das über einen Kontextanpassungsor für newContext verfügt, wird ein Aufruf von

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

ändert den Kontext/diesen Zeiger von instance in newContext, bevor die GetValue-Methode von someKey aufgerufen wird, da der Zugriff auf someKey über den Kontextanpassungsor übergeben wurde.

Jedes IModelObject , das einem anderen Objekt als übergeordnetes Modell hinzugefügt wird, muss das IDataModelConcept-Konzept einzeln unterstützen. Ein Fehler bei der Implementierung dieses Konzepts kann dazu führen, dass der Aufruf der AddParentModel-Methode fehlschlägt.

Syntax

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

Parameter

model

Ein IModelObject , das der übergeordneten Modellkette des angegebenen Objekts hinzugefügt wird. Dieses IModelObject muss das IDataModelConcept-Konzept individuell unterstützen.

contextObject

Wenn dem Datenmodell eine Kontextanpassung zugeordnet ist, kann der angepasste Kontext (oder ein Eigenschaftszugriffsor, der den angepassten Kontext zurückgibt) hier übergeben werden.

override

Ein Hinweis darauf, ob das durch das Modellargument angegebene übergeordnete Modell an der Vorderseite oder am Ende der linearen Kette übergeordneter Modelle platziert wird. Ein Wert von false (normalerweise angegeben) gibt das Ende der Kette an. Der Wert true gibt die Front der Kette an.

Rückgabewert

Diese Methode gibt HRESULT zurück, das auf Erfolg oder Fehler hinweist.

Hinweise

** Codebeispiel**



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

Anforderungen

Anforderung Wert
Header dbgmodel.h

Weitere Informationen

IModelObject-Schnittstelle