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 |