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 将创建仅匹配传递给它的模块的特定实例的签名。 如果在 64 位 Windows) 上运行的 32 位进程中有两个模块副本加载 (ntdll,则只会匹配传递的特定实例。 如果卸载并重新加载该 DLL,该 DLL 也将不再匹配。 签名与调试器所称的模块的特定实例相关联。

要求

要求
Header dbgmodel.h

另请参阅

IDebugHostSymbols 接口

FindModuleByName

CreateTypeSignature