IDataModelManager::RegisterModelForTypeSignature 메서드(dbgmodel.h)
RegisterModelForTypeSignature 메서드는 호출자가 지정된 형식(또는 형식 집합)에 대해 정식 시각화 도우미를 등록하는 데 사용하는 기본 메서드입니다. 정식 시각화 도우미는 사실상 지정된 형식(또는 형식 집합)의 표시를 인수하는 데이터 모델입니다. 디버거 사용자 인터페이스에 표시되는 형식의 네이티브/언어 보기 대신 등록된 데이터 모델에서 제공하는 형식의 보기가 표시됩니다(원하는 사용자의 기본/언어 보기로 돌아가는 수단과 함께). 이 메서드에 전달되는 형식 서명은 여러 구체적인 형식과 일치할 수 있습니다. 지정된 형식 instance 일치하는 항목이 여러 대인 경우 가장 적합한 일치 항목만 반환됩니다. 특정 구체적인 형식을 더 구체적으로 참조하는 경우 한 형식 서명은 다른 형식보다 더 일치하는 것으로 간주됩니다. 예제:
A) std::pair<*, *>
B) std::pair<int, *>
C) std::pair<int, float>
위의 세 가지 형식 서명(A, B 및 C)이 등록되고 구체적인 형식에 대해 검사되는 경우:
std::pair<int, float>
Alltype 서명은 이 형식 instance 일치합니다. int(B의 첫 번째 템플릿 인수)가 와일드카드(A의 첫 번째 템플릿 인수)보다 더 일치하기 때문에 두 번째는 첫 번째보다 더 나은 일치입니다. 마찬가지로, 세 번째는 두 번째보다 더 나은 일치입니다(와일드카드가 없는 총 일치).
RegisterModelForTypeSignature 메서드는 중복 형식 서명을 등록할 수 없습니다. 하나의 데이터 모델만 지정된 형식 서명에 대한 정식 시각화 도우미로 등록할 수 있습니다. 동일한 형식 서명을 두 번 등록하려고 하면 실패합니다. 마찬가지로 RegisterModelForTypeSignature 메서드는 등록할 형식 instance 모호하게 일치시킬 수 있는 형식 서명을 허용하지 않습니다. 예를 들어
D) std::pair<int, *>
E) std::pair<*, int>
위의 두 형식 서명(D 및 E)을 모두 등록할 수 없습니다. 일부 형식의 경우 어떤 서명이 적용되는지 명확하며 가장 적합합니다. 예를 들어
std::pair<int, float>
float 및 int가 일치하지 않으므로 이 중 첫 번째(D)만 일치합니다. 그러나 다음을 고려할 때 완전히 모호합니다.
std::pair<int, int>
이러한 서명 중 하나가 똑같이 좋습니다(둘 다 콘크리트와 와일드카드 일치가 하나 있습니다). 이러한 형식 서명은 모호합니다. 따라서 이러한 이유로 두 번째 등록 호출이 실패합니다.
구문
HRESULT RegisterModelForTypeSignature(
IDebugHostTypeSignature *typeSignature,
IModelObject *dataModel
);
매개 변수
typeSignature
등록할 형식 서명입니다. 이 형식 서명과 가장 일치하는 구체적인 형식의 모든 네이티브/언어 개체에는 dataModel 인수에 의해 지정된 데이터 모델이 자동으로 연결됩니다.
dataModel
지정된 형식 서명과 일치하는 형식의 정식 시각화 도우미가 될 데이터 모델입니다.
반환 값
이 메서드는 성공 또는 실패를 나타내는 HRESULT를 반환합니다. 이 메서드는 동일하거나 모호한 형식 서명을 등록하지 못합니다.
설명
예제 코드
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->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 |