IDebugHostSymbols::CreateTypeSignatureForModuleRange-Methode (dbgmodel.h)
Die CreateTypeSignatureForModuleRange-Methode erstellt eine Signatur, die verwendet werden kann, um eine Reihe konkreter Typen anhand der Modulsignatur und des Typnamens abzugleichen. Dies ähnelt der CreateTypeSignature-Methode, mit der Ausnahme, dass der Aufrufer anstelle eines bestimmten Moduls, das mit der Signatur übereinstimmt, die Argumente übergibt, die zum Erstellen einer Modulsignatur erforderlich sind (als ob die Modulsignatur mit der CreateModuleSignature-Methode erstellt würde).
Syntax
HRESULT CreateTypeSignatureForModuleRange(
PCWSTR signatureSpecification,
PCWSTR moduleName,
PCWSTR minVersion,
PCWSTR maxVersion,
IDebugHostTypeSignature **typeSignature
);
Parameter
signatureSpecification
Die Signaturzeichenfolge, die die Typen identifiziert, für die diese Signatur gilt. Das Format dieser Zeichenfolge ist spezifisch für die Zu debuggende Sprache. Für C/C++ entspricht dies einer NatVis-Typspezifikation. Dies ist ein Typname, bei dem Für Vorlagenargumente (angegeben als *) Wildcards zulässig sind.
moduleName
Der Name, mit dem das enthaltende Modul übereinstimmen muss (ohne Beachtung der Groß-/Kleinschreibung), damit der Typ als Übereinstimmung für die Signatur betrachtet wird.
minVersion
Die Mindestversion des enthaltenden Moduls für den Typ, der als Übereinstimmung für die Signatur betrachtet werden soll. Das Format dieses Arguments entspricht demselben Argument in CreateModuleSignature.
maxVersion
Die maximale Version des enthaltenden Moduls für den Typ, der als Übereinstimmung für die Signatur betrachtet werden soll. Das Format dieses Arguments entspricht demselben Argument in CreateModuleSignature.
typeSignature
Das neu erstellte Typsignaturobjekt wird hier zurückgegeben.
Rückgabewert
Diese Methode gibt HRESULT zurück, das den Erfolg oder Fehler angibt.
Hinweise
Beispielcode
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.
}
}
Unterschiede beim Abgleich von Symbolmodulen in FindModuleByName, CreateTypeSignature und CreateTypeSignatureForModuleRange
FindModuleByName lässt zu, dass der übergebene Modulname entweder der reale Imagename des Moduls ist, z. B. My Module.dll, oder der Name, auf den Sie in der Debugger-Engine verweisen können (z. B. MyModule oder MyModule_<hex_base>).
Wenn Sie CreateTypeSignatureForModuleRange aufrufen und einen Namen/nullptr/nullptr übergeben, wird eine Signatur erstellt, die mit jedem Modul übereinstimmt, das mit diesem Namen einer beliebigen Version übereinstimmt.
Der an die CreateTypeSignature-Funktionen übergebene Modulname akzeptiert nur den tatsächlichen Bildnamen des Moduls (z. B. MyModule.dll).
Wenn Sie FindModuleByName und dann CreateTypeSignature mit diesem Modul aufrufen, wird eine Signatur erstellt, die nur der bestimmten instance des moduls entspricht, das an dieses Modul übergeben wird. Wenn zwei Kopien eines Moduls geladen werden (z. B. ntdll in einem 32-Bit-Prozess, der unter 64-Bit-Windows ausgeführt wird), entspricht es nur der spezifischen übergebenen instance. Es würde auch nicht mehr übereinstimmen, wenn diese DLL entladen und neu geladen würde. Die Signatur ist einer bestimmten instance eines Moduls zugeordnet, wie vom Debugger bekannt.
Anforderungen
Anforderung | Wert |
---|---|
Header | dbgmodel.h |