Partager via


IDebugComPlusSymbolProvider2::GetTypesByName

Récupère un type donné son nom.

Syntaxe

int GetTypesByName(
    string               pszClassName,
    enum_ NAME_MATCH     nameMatch,
    out IEnumDebugFields ppEnum
);

Paramètres

pszClassName
[in] Nom du type.

nameMatch
[in] Sélectionne le type de correspondance, par exemple, respectant la casse. Valeur de l’énumération NAME_MATCH .

ppEnum
[out] Énumérateur qui contient le type ou les types portant le nom donné.

Valeur de retour

En cas de réussite, retourne S_OK , sinon, retourne un code d'erreur.

Notes

Pour les types génériques, le nom à rechercher pour « List<int> » ou « List int , int> » est « List<». Si les types du même nom apparaissent dans plusieurs modules, le ppEnum paramètre contient toutes les copies. Vous devez utiliser GetTypeInfo et distinguer en fonction du guidModule paramètre.

Exemple

L’exemple suivant montre comment implémenter cette méthode pour un objet CDebugSymbolProvider qui expose l’interface IDebugComPlusSymbolProvider2 .

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

Voir aussi