IDebugComPlusSymbolProvider2:: GetTypesByName
Recupera un tipo in base al nome.
HRESULT GetTypesByName(
LPCOLESTR pszClassName,
NAME_MATCH nameMatch,
IEnumDebugFields** ppEnum
);
int GetTypesByName(
string pszClassName,
enum_ NAME_MATCH nameMatch,
out IEnumDebugFields ppEnum
);
Parametri
pszClassName
[in] Nome del tipo.nameMatch
[in] Selezionare il tipo di corrispondenza, ad esempio, la distinzione tra maiuscole e minuscole. Valore ottenuto dall'enumerazione NAME_MATCH.ppEnum
[out] Un enumeratore che contiene il tipo o i tipi con il nome specificato.
Valore restituito
Se l'operazione riesce, restituisce S_OK; in caso contrario, restituisce un codice di errore.
Note
Per i tipi generici, il nome da cercare “l'elenco <int> „ o “l'elenco <int, int> „ sarebbe “elenco„. Se i tipi degli stessi nomi vengono visualizzati in moduli più, il parametro di ppEnum conterrà tutte le copie. È necessario utilizzare IDebugField:: GetTypeInfo e distinguere base al parametro di guidModule .
Esempio
Nell'esempio seguente viene illustrato come implementare questo metodo per un oggetto di CDebugSymbolProvider che espone IDebugComPlusSymbolProvider2 l'interfaccia.
HRESULT CDebugSymbolProvider::GetTypesByName(
LPCOLESTR pszClassName,
NAME_MATCH nameMatch,
IEnumDebugFields** ppEnum
)
{
HRESULT hr = S_OK;
CModIter ModIter;
CModule* pmodule; // the iterator owns the reference
CFieldList listField;
ASSERT(IsValidWideStringPtr(pszClassName));
ASSERT(IsValidWritePtr(ppEnum, IEnumDebugFields*));
METHOD_ENTRY( CDebugSymbolProvider::GetTypesByName );
IfFalseGo( pszClassName && ppEnum, E_INVALIDARG );
*ppEnum = NULL;
IfFailGo( GetModuleIter(&ModIter) );
hr = S_FALSE;
if ( nameMatch == nmCaseInsensitive)
{
while (ModIter.GetNext(&pmodule))
{
if (pmodule->FindTypesByNameCaseInsensitive( pszClassName,
&listField,
this ) )
{
hr = S_OK;
}
}
}
else
{
while (ModIter.GetNext(&pmodule))
{
if (pmodule->FindTypesByName( pszClassName,
&listField,
this) )
{
hr = S_OK;
}
}
}
// If the list is empty then no type
IfFalseGo( listField.GetCount(), E_FAIL );
// Create enumerator
IfFailGo( CreateEnumerator( ppEnum, &listField ) );
Error:
METHOD_EXIT( CDebugSymbolProvider::GetTypesByName, hr );
return hr;
}