Método IDataModelManager::AcquireNamedModel (dbgmodel.h)
Esto busca un nombre de modelo conocido y devuelve el modelo de datos registrado por ese nombre. Tenga en cuenta que si no hay ningún modelo registrado por el nombre proporcionado, se creará un código auxiliar y se devolverá al autor de la llamada.
Todo lo que se agregue al código auxiliar se agregará al objeto real en el momento en que se realiza un registro.
Sintaxis
HRESULT AcquireNamedModel(
PCWSTR modelName,
IModelObject **modelObject
);
Parámetros
modelName
Nombre para el que se va a buscar un modelo de datos registrado.
modelObject
El modelo de datos que se registró bajo el nombre proporcionado por el argumento modelName se devolverá aquí. Si no se registra este modelo de datos, se creará un objeto de código auxiliar, se registrará temporalmente con el nombre proporcionado por el argumento modelName y se devolverá aquí. Si esto ocurre, cuando el objeto real se registra a través de una llamada al método RegisterNamedModel, los cambios realizados en el objeto de código auxiliar son, en efecto, movidos al modelo de datos real.
Valor devuelto
Este método devuelve HRESULT.
Comentarios
Un llamador que desea extender un modelo de datos registrado bajo un nombre determinado llama al método AcquireNamedModel para recuperar el objeto para el modelo de datos que desean extender. Este método devolverá cualquier modelo de datos que se haya registrado a través de una llamada anterior al método RegisterNamedModel.
Como el propósito principal del método AcquireNamedModel es extender el modelo, este método tiene un comportamiento especial si aún no se ha registrado ningún modelo con el nombre especificado. Si aún no se ha registrado ningún modelo con el nombre especificado, se crea un objeto de código auxiliar, se registra temporalmente con el nombre especificado y se devuelve al autor de la llamada. Cuando el modelo de datos real se registra a través de una llamada al método RegisterNamedModel, los cambios realizados en el objeto de código auxiliar son, en efecto, realizados en el modelo real. Esto quita muchos problemas de dependencia del orden de carga de los componentes que se extienden entre sí.
Código de ejemplo
ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IModelObject> spExtensionModel; /* create a data model object you want
to use as an extension (see
CreateDataModelObject) */
// Get the process model so we can extend it
ComPtr<IModelObject> spProcessModel;
if (SUCCEEDED(spManager->AcquireNamedModel(L"Debugger.Models.Process",
&spProcessModel)))
{
// We have the process model and can extend it. Even if the name we queried
// for is *NOT* yet registered, we can extend what gets returned (a stub)
// and the extensions on it will be moved to the real object
// once RegisterNamedModel() is called.
if (SUCCEEDED(spProcessModel->AddParentModel(spExtensionModel.Get(),
nullptr,
false)))
{
// We have successfully extended the debugger's concept of a
// process with whatever we have in spExtensionModel!
}
}
Requisitos
Requisito | Valor |
---|---|
Header | dbgmodel.h |