Metodo IDebugHostSymbols::CreateTypeSignature (dbgmodel.h)
Il metodo CreateTypeSignature crea una firma che può essere usata per corrispondere a un set di tipi di cemento contenente il nome del modulo e del tipo. Il formato della stringa di firma del nome di tipo è specifico del linguaggio in fase di debug (e dell'host di debug). Per C/C++, la stringa di firma equivale a una specifica del tipo NatVis. Ovvero, la stringa di firma è un nome di tipo in cui i caratteri jolly (specificati come *) sono consentiti per gli argomenti del modello.
Sintassi
HRESULT CreateTypeSignature(
PCWSTR signatureSpecification,
IDebugHostModule *module,
IDebugHostTypeSignature **typeSignature
);
Parametri
signatureSpecification
Stringa di firma che identifica i tipi a cui si applica questa firma. Il formato di questa stringa è specifico del linguaggio in fase di debug. Per C/C++, questo equivale a una specifica del tipo NatVis. Questo è un nome di tipo in cui i caratteri jolly sono consentiti per gli argomenti del modello (specificati come *).
module
Se specificato, solo i tipi contenuti all'interno del modulo specificato corrispondono alla firma. Se non specificato, i tipi in qualsiasi modulo possono potenzialmente corrispondere alla firma.
typeSignature
L'oggetto firma del tipo creato viene restituito qui.
Valore restituito
Questo metodo restituisce HRESULT che indica l'esito positivo o l'errore.
Commenti
Codice di esempio
ComPtr<IDebugHost> spHost; /* get the host */
ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
// Create a type signature for MyTemplateType<*>
ComPtr<IDebugHostTypeSignature> spSig1;
if (SUCCEEDED(spSym->CreateTypeSignature(L"MyTemplateType<*>",
nullptr,
&spSig1)))
{
// spSig1 is a type signature which will match any concrete template
// type with a base name of MyTemplateType and *ANY* template arguments.
// This is true regardless of the module in which the type is contained.
}
ComPtr<IDebugHostModule> spMyModule;
if (SUCCEEDED(spSym->FindModuleByName(USE_CURRENT_HOST_CONTEXT,
L"MyModule.dll",
&spMyModule)))
{
// Create a type signature for MyTemplateType<*> within MyModule.dll.
ComPtr<IDebugHostTypeSignature> spSig2;
if (SUCCEEDED(spSym->CreateTypeSignature(L"MyTemplateType<*>",
nullptr,
&spSig2)))
{
// spSig2 is a type signature which will match any concrete
// template type with a base name of MyTemplateType and *ANY*
// template arguments that is within the particular MyModule.dll
// that's in the current UI context (e.g.: process) of the debugger.
// This means if the host is debugging multiple processes
// and you switch processes, a MyTemplateType<*> in an identically
// named and versioned MyModule.dll will *NOT* match this signature.
}
}
}
Differenze nel modulo dei simboli corrispondenti in FindModuleByName, CreateTypeSignature e CreateTypeSignatureForModuleRange
FindModuleByName consente al nome del modulo passato di essere il nome dell'immagine reale del modulo, ad esempio My Module.dll o quello che è possibile fare riferimento dal motore del debugger (ad esempio MyModule o MyModule_<hex_base>).
Chiamando CreateTypeSignatureForModuleRange e passando un nome/nullptr/nullptr creerà una firma che corrisponderà a qualsiasi modulo corrispondente a tale nome di qualsiasi versione.
Il nome del modulo passato alle funzioni CreateTypeSignature accetta solo il nome dell'immagine reale del modulo, ad esempio MyModule.dll.
Chiamando FindModuleByName e quindi CreateTypeSignature con tale modulo creerà una firma che corrisponderà solo all'istanza specifica del modulo passato. Se sono presenti due copie di un modulo caricato ,ad esempio ntdll in un processo a 32 bit in esecuzione in Windows a 64 bit, corrisponderebbe solo all'istanza specifica passata. Non corrisponderà più a se tale DLL fosse scaricata e ricaricata. La firma è associata a un'istanza specifica di un modulo come noto dal debugger.
Requisiti
Requisito | Valore |
---|---|
Intestazione | dbgmodel.h |