Condividi tramite


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;
}

Vedere anche

Riferimenti

IDebugComPlusSymbolProvider2