Partilhar via


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

O método SetContextForDataModel é usado pela implementação de um modelo de dados para colocar dados de implementação em objetos de instância. Conceitualmente, cada IModelObject (chame-a de instância para simplificar) contém uma tabela de estado de hash. A tabela de hash é indexada por outro IModelObject (chame-o de modelo de dados para simplificar), que está na hierarquia de modelo pai da instância. O valor contido nesse hash é um conjunto de informações de estado contadas de referência representadas por uma instância IUnknown. Depois que o modelo de dados define esse estado na instância, ele pode armazenar dados arbitrários de implementação que podem ser recuperados durante itens como getters de propriedade.

Geralmente, é o caso de extensões (ou outros componentes do modelo de dados) quererem representar algum constructo sintético como o que se pode considerar um tipo. A exposição de objetos de processo do depurador é um desses exemplos. Com frequência, uma implementação mapeará a noção de uma definição de tipo para um modelo de dados. O modelo de dados conterá getters de propriedade para as coisas que são expostas no objeto (por exemplo: nome do processo, ID do processo, contagem de threads, threads etc...). Quando é hora de criar uma instância desse modelo de dados, um objeto sintético em branco é criado e o modelo de dados (ou o que podemos considerar a definição de tipo) é anexado como um modelo pai. Em alguns casos, informações suficientes para identificar exclusivamente o objeto e implementar todos os getters de propriedade do modelo de dados podem ser capazes de ser colocadas diretamente no objeto da instância. Em nosso exemplo de processo, a ID do processo pode ser armazenada como uma ID de chave chamada na instância. Quando um getter no modelo de dados é chamado, digamos para o nome do processo, por exemplo, a implementação pode simplesmente chamar o método GetKeyValue para buscar a ID do processo. A implementação necessária para retornar o nome pode fazer isso do PID. Em outros casos, o estado necessário para implementar o tipo é mais complexo, contém outros constructos nativos ou, por outros motivos, não pode ser definido como uma chave de instância. Nesses casos, o modelo de dados construirá uma classe derivada de IUnknown, colocará os dados de implementação nessa classe e chamará o método SetContextForDataModel na instância para associar seus dados de implementação ao objeto de instância. Quando a instância for destruída, a contagem de referência na classe de estado será liberada e ela será liberada conforme necessário

Sintaxe

HRESULT SetContextForDataModel(
  IModelObject *dataModelObject,
  IUnknown     *context
);

Parâmetros

dataModelObject

O IModelObject que representa o modelo de dados para o qual o estado está sendo armazenado em um objeto de instância. Essa é, na verdade, uma chave de hash para o objeto de estado associado.

context

O estado associado à instância. O significado exato disso (e de qualquer outra interface, etc... que ele dá suporte) cabe ao modelo de dados que está fazendo a chamada para definir esse estado. O único requisito é que esse estado seja a referência COM contada.

Valor de retorno

Esse método retorna HRESULT que indica êxito ou falha.

Observações

de exemplo de código

ComPtr<IModelObject> spObject;          /* get an object */
ComPtr<IModelObject> spDataModelObject; /* get an attached data model (from earlier
                                           AddParentModel or from GetParentModel) anywhere in 
                                           the ancestor tree */

// Context data must be IUnknown derived.  Otherwise, implementation is opaque to the data model.
class MyContextData :
    public Microsoft::WRL::RuntimeClass<
        Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>,
        IUnknown
        >
{
    /* put whatever you want here */
};

ComPtr<MyContextData> spContextData = Microsoft::WRL::Make<MyContextData>();
if (SUCCEEDED(spObject->SetContextForDataModel(spDataModelObject.Get(), spContextData.Get())))
{
    // There is now context data associated with spObject (an instance) for 
    // spDataModelObject (a parent model).  This can be fetched via
    // GetContextForDataModel.  Note that spObject and spDataModelObject only need t
    // to be related.  The model does not need to be an immediate parent.
}

Requisitos

Requisito Valor
cabeçalho dbgmodel.h

Consulte também

interface IModelObject