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 |
请参阅
反馈
提交和查看相关反馈