RegisterModelForTypeSignature 方法是调用方用来为给定类型(或类型集)注册规范可视化工具的主要方法。 规范可视化工具是一个数据模型,实际上,它接管给定类型的显示(或类型集)。 显示注册的数据模型所呈现的类型视图(以及返回所需用户的本机/语言视图),而不是任何调试器用户界面中显示的类型的本机/语言视图。 传递给此方法的类型签名可能与多个具体类型匹配。 如果给定类型实例有多个匹配项,则只返回最佳匹配项。 如果一种类型签名更具体地引用给定的具体类型,则被视为比另一种类型更好的匹配项。 例如:
A) std::pair<*, *>
B) std::pair<int, *>
C) std::pair<int, float>
如果针对具体类型注册并检查上述三种类型签名(A、B 和 C):
std::pair<int, float>
Alltype 签名与此类型实例匹配。 第二个是比第一个更好的匹配,因为 int(B 的第一个模板参数)是比通配符(A 的第一个模板参数)更好的匹配。 同样,第三个是比第二个更好的匹配(这是没有通配符的总匹配)。 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<IDataModelManager3> 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 |