다음을 통해 공유


IDebugHostSymbols::CreateTypeSignatureForModuleRange 메서드(dbgmodel.h)

CreateTypeSignatureForModuleRange 메서드는 모듈 서명 및 형식 이름으로 구체적인 형식 집합을 일치시키는 데 사용할 수 있는 서명을 만듭니다. 이는 서명과 일치하도록 특정 모듈을 전달하는 대신 모듈 서명을 만드는 데 필요한 인수를 전달한다는 점을 제외하고 CreateTypeSignature 메서드와 유사합니다(CreateModuleSignature 메서드를 사용하여 모듈 서명을 만든 것처럼).

구문

HRESULT CreateTypeSignatureForModuleRange(
  PCWSTR                  signatureSpecification,
  PCWSTR                  moduleName,
  PCWSTR                  minVersion,
  PCWSTR                  maxVersion,
  IDebugHostTypeSignature **typeSignature
);

매개 변수

signatureSpecification

이 서명이 적용되는 형식을 식별하는 서명 문자열입니다. 이 문자열의 형식은 디버깅 중인 언어와 관련이 있습니다. C/C++의 경우 NatVis 형식 사양과 동일합니다. 템플릿 인수에 와일드카드가 허용되는 형식 이름입니다(*로 지정됨).

moduleName

형식이 서명에 대한 일치 항목으로 간주되려면 포함하는 모듈이 일치해야 하는 이름(대/소문자를 구분하지 않음)입니다.

minVersion

서명에 대한 일치 항목으로 간주될 형식에 대한 포함 모듈의 최소 버전입니다. 이 인수의 형식은 CreateModuleSignature의 동일한 인수와 동일합니다.

maxVersion

서명에 대한 일치 항목으로 간주될 형식에 대한 포함 모듈의 최대 버전입니다. 이 인수의 형식은 CreateModuleSignature의 동일한 인수와 동일합니다.

typeSignature

새로 만든 형식 서명 개체가 여기에 반환됩니다.

반환 값

이 메서드는 성공 또는 실패를 나타내는 HRESULT를 반환합니다.

설명

예제 코드

ComPtr<IDebugHost> spHost; /* get the host */

ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
    ComPtr<IDebugHostTypeSignature> spSig;
    if (SUCCEEDED(spSym->CreateTypeSignatureForModuleRange(
        L"MyTemplateType<*>", 
        L"MyModule.dll", 
        L"6.3", 
        L"10.0.0.0", 
        &spSig)))
    {
        // spSig is a type signature which will match any template type with 
        // a base name of MyTemplateType and *ANY* template arguments that is 
        // within a module named "MyModule.dll" with a version >= 6.3(.0.0) 
        // and a version <= 10.0.0.0 (regardless of the process/context of the module)
        //
        // Note that the version arguments are optional.  If absent, it indicates 
        // there is either no lower or no upper bound on the module version 
        // to match the signature.
    }
}

FindModuleByName, CreateTypeSignature 및 CreateTypeSignatureForModuleRange에서 기호 모듈 일치의 차이점

FindModuleByName 을 사용하면 전달된 모듈 이름이 모듈의 실제 이미지 이름(예: My Module.dll) 또는 디버거 엔진에서 참조할 수 있는 모듈 이름(예: MyModule 또는 MyModule_<hex_base>)이 될 수 있습니다.

CreateTypeSignatureForModuleRange를 호출하고 name/nullptr/nullptr을 전달하면 모든 버전의 이름과 일치하는 모듈과 일치하는 서명을 만듭니다.

CreateTypeSignature 함수에 전달된 모듈 이름은 모듈의 실제 이미지 이름(예: MyModule.dll)만 수락합니다.

FindModuleByName을 호출한 다음 해당 모듈을 사용하여 CreateTypeSignature를 호출하면 전달된 모듈의 특정 instance 일치하는 서명이 생성됩니다. 로드된 모듈의 복사본이 두 개 있는 경우(예: 64비트 Windows에서 실행되는 32비트 프로세스의 ntdll) 전달된 특정 instance만 일치합니다. DLL이 언로드되고 다시 로드된 경우에도 더 이상 일치하지 않습니다. 서명은 디버거에서 알려진 모듈의 특정 instance 연결됩니다.

요구 사항

요구 사항
헤더 dbgmodel.h

추가 정보

IDebugHostSymbols 인터페이스

FindModuleByName

CreateTypeSignature