Share via


Método IModelObject::AddParentModel (dbgmodel.h)

El método AddParentModel agrega un nuevo modelo primario al objeto especificado. Este modelo se puede agregar al final de la cadena de búsqueda (el argumento override se especifica como false) o en la parte delantera de la cadena de búsqueda (el argumento override se especifica como true). Además, cada modelo primario puede ajustar opcionalmente el contexto (la semántica de este puntero) para cualquier propiedad o concepto en el elemento primario especificado (o cualquier persona de su jerarquía primaria). El ajuste del contexto rara vez se usa, pero permite algunos conceptos eficaces como la inserción de objetos, la construcción de espacios de nombres, etc.

Cuando un modelo primario tiene un ajuste de contexto, el modelo de datos principal realizará este ajuste automáticamente en nombre del autor de la llamada. En efecto, para una instancia de objeto con un modelo primario que tiene un ajustador de contexto en newContext, una llamada de

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

terminará cambiando el contexto o este puntero de la instancia a newContext antes de llamar al método GetValue de someKey, ya que el acceso a someKey pasó a través del ajustador de contexto.

Cualquier IModelObject que se agregue como modelo primario a otro objeto debe admitir individualmente el concepto IDataModelConcept . Si no se implementa este concepto, se producirá un error en la llamada al método AddParentModel.

Sintaxis

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

Parámetros

model

IModelObject que se agregará a la cadena de modelos primaria del objeto especificado. Este IModelObject debe admitir individualmente el concepto IDataModelConcept .

contextObject

Si el modelo de datos tiene asociado un ajuste de contexto, el contexto ajustado (o un descriptor de acceso de propiedad que devuelve el contexto ajustado) se puede pasar aquí.

override

Indicación de si el modelo primario especificado por el argumento model se coloca en la parte delantera o al final de la cadena lineal de modelos primarios. Un valor de false (normalmente proporcionado) indica el final de la cadena. Un valor de true indica la parte delantera de la cadena.

Valor devuelto

Este método devuelve HRESULT que indica éxito o error.

Comentarios

** Ejemplo de código**



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

Requisitos

Requisito Valor
Header dbgmodel.h

Consulte también

Interfaz IModelObject