Método IDebugHostSymbols::CreateTypeSignatureForModuleRange (dbgmodel.h)
El método CreateTypeSignatureForModuleRange crea una firma que se puede usar para hacer coincidir un conjunto de tipos concretos mediante la firma del módulo y el nombre de tipo. Esto es similar al método CreateTypeSignature, excepto que, en lugar de pasar un módulo específico para que coincida con la firma, el autor de la llamada pasa los argumentos necesarios para crear una firma de módulo (como si la firma del módulo se creara con el método CreateModuleSignature).
Sintaxis
HRESULT CreateTypeSignatureForModuleRange(
PCWSTR signatureSpecification,
PCWSTR moduleName,
PCWSTR minVersion,
PCWSTR maxVersion,
IDebugHostTypeSignature **typeSignature
);
Parámetros
signatureSpecification
Cadena de firma que identifica los tipos a los que se aplica esta firma. El formato de esta cadena es específico del lenguaje que se está depurando. Para C/C++, esto equivale a una especificación de tipo NatVis. Este es un nombre de tipo donde se permiten caracteres comodín para los argumentos de plantilla (especificados como *).
moduleName
El nombre que el módulo contenedor debe coincidir (sin distinción entre mayúsculas y minúsculas) para que el tipo se considere una coincidencia para la firma.
minVersion
Versión mínima del módulo contenedor para que el tipo se considere una coincidencia para la firma. El formato de este argumento es equivalente al mismo argumento en CreateModuleSignature.
maxVersion
Versión máxima del módulo contenedor para que el tipo se considere una coincidencia para la firma. El formato de este argumento es equivalente al mismo argumento en CreateModuleSignature.
typeSignature
El objeto de firma de tipo recién creado se devolverá aquí.
Valor devuelto
Este método devuelve HRESULT que indica éxito o error.
Comentarios
Código de ejemplo
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.
}
}
Diferencias en la coincidencia de módulos de símbolos en FindModuleByName, CreateTypeSignature y CreateTypeSignatureForModuleRange
FindModuleByName permitirá que el nombre del módulo pasado sea el nombre de imagen real del módulo, por ejemplo, Mi Module.dll o el que puede hacer referencia a él en el motor del depurador (por ejemplo: MyModule o MyModule_<hex_base>).
Al llamar a CreateTypeSignatureForModuleRange y pasar un nombre,nullptr/nullptr/nullptr, se creará una firma que coincidirá con cualquier módulo que coincida con ese nombre de cualquier versión.
El nombre del módulo pasado a las funciones CreateTypeSignature solo aceptará el nombre de imagen real del módulo (por ejemplo, MyModule.dll).
Al llamar a FindModuleByName y, a continuación, CreateTypeSignature con ese módulo se creará una firma que coincidirá solo con la instancia concreta del módulo que se le ha pasado. Si hay dos copias de un módulo que se carga (por ejemplo, ntdll en un proceso de 32 bits que se ejecuta en Windows de 64 bits), solo coincidiría con la instancia específica pasada. Tampoco coincidiría si ese archivo DLL se descargara y se volvera a cargar. La firma está asociada a una instancia específica de un módulo, como lo conoce el depurador.
Requisitos
Requisito | Valor |
---|---|
Header | dbgmodel.h |