Método IDataModelManager2::RegisterExtensionForTypeSignature (dbgmodel.h)
O método RegisterExtensionForTypeSignature é semelhante ao método RegisterModelForTypeSignature com uma diferença fundamental. O modelo de dados que é passado para esse método não é o visualizador canônico para qualquer tipo e não assumirá a exibição da exibição nativa/de idioma desse tipo. O modelo de dados que é passado para esse método será adicionado automaticamente como pai a qualquer tipo concreto que corresponda à assinatura de tipo fornecida.
Ao contrário do método RegisterModelForTypeSignature, não há limite para assinaturas de tipo idênticas ou ambíguas sendo registradas como extensões para um determinado tipo (ou conjunto de tipos). Cada extensão cuja assinatura de tipo corresponde a uma determinada instância de tipo concreto fará com que o modelo de dados registrado por meio desse método seja anexado automaticamente a objetos recém-criados como modelos pai. Isso, na verdade, permite que um número arbitrário de clientes estenda um tipo (ou conjunto de tipos) com novos campos ou funcionalidades.
Sintaxe
HRESULT RegisterExtensionForTypeSignature(
IDebugHostTypeSignature *typeSignature,
IModelObject *dataModel
);
Parâmetros
typeSignature
A assinatura de tipo na qual o modelo de dados fornecido será registrado como uma extensão. Cada objeto nativo/idioma cujo tipo concreto corresponde a essa assinatura terá o modelo de dados fornecido anexado automaticamente como um modelo pai.
dataModel
O modelo de dados que será adicionado automaticamente como um modelo pai a cada objeto nativo/idioma com um tipo concreto que corresponda à assinatura de tipo fornecida.
Retornar valor
Esse método retorna HRESULT que indica êxito ou falha.
Comentários
Código de exemplo
ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IDebugHost> spHost; /* get the debug host */
ComPtr<IModelObject> spDataModel; /* create a data model (see
CreateDataModelObject) */
ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
// Create a signature to match MyType<*>
ComPtr<IDebugHostTypeSignature> spTypeSignature;
if (SUCCEEDED(spSym->CreateTypeSignature(L"MyType<*>", nullptr, &spTypeSignature)))
{
// Register the model for std::vector<*>
if (SUCCEEDED(spManager->RegisterExtensionForTypeSignature(
spTypeSignature.Get(),
spDataModel.Get())
)
{
// Every instance matching MyType<*> will now have spDataModel
// attached as the parent. This data model is considered an "extension"
// (adding properties). It will not be counted as a visualizer and
// will not "take over" the display of the type
}
}
}
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | dbgmodel.h |