IDataModelManager2::RegisterModelForTypeSignature (dbgmodel.h)

RegisterModelForTypeSignature 方法是调用方用来为给定类型注册规范可视化工具的主要方法, (或类型集) 。 规范可视化工具是一种数据模型,它实际上接管给定类型或 (类型的显示) 。 对于任何调试器用户界面中显示的类型的本机/语言视图, (会显示已注册数据模型显示的类型视图,并提供了一种返回本机/语言视图的方法,供其) 。 传递给此方法的类型签名可以匹配多个具体类型。 如果给定类型实例有多个匹配项,则仅返回最佳匹配项。 如果一种类型签名更具体地引用给定的具体类型,则认为它比另一种类型签名更匹配。 例如:

A) std::pair<*, *>
B) std::pair<int, *>
C) std::pair<int, float>

如果上述三个类型签名 (A、B 和 C) 注册并检查具体类型:

std::pair<int, float>

Alltype 签名匹配此类型实例。 第二个比第一个匹配更好,因为 int (B) 的第一个模板参数比通配符 (第一个模板参数的匹配) 。 同样,第三个匹配项比第二个匹配 (它是一个完全匹配,没有通配符) 。 RegisterModelForTypeSignature 方法不允许注册重复的类型签名。 只能将一个数据模型注册为给定类型签名的规范可视化工具。 尝试注册同一类型签名两次会失败。 同样,RegisterModelForTypeSignature 方法将不允许类型签名,这些类型签名可能不明确地匹配要注册的任何类型实例。 示例:

D) std::pair<int, *>
E) std::pair<*, int>

上述两个类型签名 (D 和 E) 不能同时注册。 对于某些类型,可以清楚地了解哪些签名适用且最佳。 例如,

std::pair<int, float>

仅匹配其中第一个 (D) ,因为 float 和 int 不匹配。 但是,在考虑以下事项时,它完全不明确:

std::pair<int, int>

这两个签名中的任一 (都有一个具体和一个通配符匹配) 。 这些类型签名不明确。 因此,出于此原因,注册其中第二个的调用将失败。

语法

HRESULT RegisterModelForTypeSignature(
  IDebugHostTypeSignature *typeSignature,
  IModelObject            *dataModel
);

参数

typeSignature

正在注册的类型签名。 任何最匹配此类型签名的具体类型的本机/语言对象都会自动附加 dataModel 参数提供的数据模型。

dataModel

要成为与给定类型签名匹配的类型的规范可视化工具的数据模型。

返回值

此方法返回指示成功或失败的 HRESULT。 此方法将无法注册相同或不明确的类型签名。

注解

示例代码

ComPtr<IDataModelManager2> 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->RegisterModelForTypeSignature(spTypeSignature.Get(),
                                                               spDataModel.Get()))
        {
            // Every instance matching MyType<*> will now have spDataModel 
            // attached as the parent.  Further, such parent is considered 
            // the canonical visualizer for all types matching MyType<*> since 
            // it was registered via RegisterModelForTypeSignature instead of
            // RegisterExtensionForTypeSignature.
        }
    }
}

要求

   
标头 dbgmodel.h

请参阅

IDataModelManager2 接口