다음을 통해 공유


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

추가 정보

IDataModelManager 인터페이스