Поделиться через


Метод 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 и передача имени/nullptr/nullptr создаст сигнатуру, которая будет соответствовать любому модулю, соответствующему имени любой версии.

Имя модуля, передаваемое функциям CreateTypeSignature, будет принимать только реальное имя образа модуля (например, MyModule.dll).

Вызов FindModuleByName и CreateTypeSignature с этим модулем создаст сигнатуру, которая будет соответствовать только конкретному экземпляру модуля, переданному ему. Если загружены две копии модуля (например, ntdll в 32-разрядном процессе, работающем в 64-разрядной версии Windows), он будет соответствовать только конкретному переданном экземпляру. Она также не будет совпадать, если эта библиотека DLL была выгружена и перезагружена. Сигнатура связана с определенным экземпляром модуля, известного отладчиком.

Требования

Требование Значение
Заголовок dbgmodel.h

См. также раздел

Интерфейс IDebugHostSymbols

FindModuleByName

CreateTypeSignature