IDebugHostSymbols ::CreateTypeSignatureForModuleRange, méthode (dbgmodel.h)
La méthode CreateTypeSignatureForModuleRange crée une signature qui peut être utilisée pour faire correspondre un ensemble de types concrets par signature de module et nom de type. Cela est similaire à la méthode CreateTypeSignature, sauf que, au lieu de transmettre un module spécifique correspondant à la signature, l’appelant transmet les arguments nécessaires pour créer une signature de module (comme si la signature du module a été créée avec la méthode CreateModuleSignature).
Syntaxe
HRESULT CreateTypeSignatureForModuleRange(
PCWSTR signatureSpecification,
PCWSTR moduleName,
PCWSTR minVersion,
PCWSTR maxVersion,
IDebugHostTypeSignature **typeSignature
);
Paramètres
signatureSpecification
Chaîne de signature qui identifie les types auxquels cette signature s’applique. Le format de cette chaîne est spécifique à la langue en cours de débogage. Pour C/C++, cela équivaut à une spécification de type NatVis. Il s’agit d’un nom de type où les caractères génériques sont autorisés pour les arguments de modèle (spécifiés sous la forme *).
moduleName
Nom que le module conteneur doit correspondre (sans respect de la casse) afin que le type soit considéré comme une correspondance pour la signature.
minVersion
Version minimale du module conteneur pour que le type soit considéré comme une correspondance pour la signature. Le format de cet argument est équivalent au même argument dans CreateModuleSignature
maxVersion
Version maximale du module conteneur pour que le type soit considéré comme une correspondance pour la signature. Le format de cet argument est équivalent au même argument dans CreateModuleSignature
typeSignature
L’objet de signature de type nouvellement créé est retourné ici.
Valeur de retour
Cette méthode retourne HRESULT qui indique la réussite ou l’échec.
Remarques
exemple de code
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.
}
}
Différences dans la correspondance de module de symboles dans FindModuleByName, CreateTypeSignature et CreateTypeSignatureForModuleRange
FindModuleByName autorisera le nom du module passé soit le nom réel de l’image réelle du module, par exemple My Module.dll, soit celui que vous pouvez référencer dans le moteur de débogueur (par exemple, MyModule ou MyModule_<hex_base>).
L’appel de CreateTypeSignatureForModuleRange et le passage d’un nom/nullptr/nullptr crée une signature qui correspond à tout module qui correspond à ce nom de toute version.
Le nom du module transmis aux fonctions CreateTypeSignature n’accepte que le nom de l’image réelle du module (par exemple : MyModule.dll).
L’appel FindModuleByName, puis CreateTypeSignature avec ce module crée une signature qui correspond uniquement à l’instance particulière du module qui lui est transmise. S’il existe deux copies d’un module chargé (par exemple, ntdll dans un processus 32 bits s’exécutant sur Windows 64 bits), il ne correspondrait qu’à l’instance spécifique passée. Elle ne correspond plus si cette DLL a été déchargée et rechargée. La signature est associée à une instance spécifique d’un module, comme le débogueur.
Exigences
Exigence | Valeur |
---|---|
d’en-tête | dbgmodel.h |