Partager via


IDiaEnumSymbolsByAddr2

Énumère par adresse les différents symboles contenus dans la source de données.

Syntax

IDiaEnumSymbolsByAddr2 : IDiaEnumSymbolsByAdd

Méthodes dans l'ordre Vtable

Le tableau suivant présente les méthodes de IDiaEnumSymbolsByAddr2.

Méthode Description
IDiaEnumSymbolsByAddr2::symbolByAddrEx Positionne l’énumérateur en effectuant une recherche par section et décalage.
IDiaEnumSymbolsByAddr2::symbolByRVAEx Positionne l’énumérateur en effectuant une recherche par adresse virtuelle relative (RVA).
IDiaEnumSymbolsByAddr2::symbolByVAEx Positionne l’énumérateur en effectuant une recherche par adresse virtuelle.
IDiaEnumSymbolsByAddr2::NextEx Récupère les symboles suivants dans l’ordre par adresse. Met à jour la position de l’énumérateur par nombre d’éléments récupérés.
IDiaEnumSymbolsByAddr2::PrevEx Récupère les symboles précédents dans l’ordre par adresse. Met à jour la position de l’énumérateur par nombre d’éléments récupérés.

Notes

Cette interface fournit des symboles regroupés par adresse. Pour utiliser des symboles regroupés par type, par exemple SymTagUDT (type défini par l’utilisateur) ou SymTagBaseClass, utilisez l’interface IDiaEnumSymbols .

Remarques pour les appelants

Obtenez cette interface en appelant la IDiaSession::getSymbolsByAddr méthode, puis en appelant IUnknown::QueryInterface avec le riid paramètre défini sur IID_IDiaEnumSymbolsByAddr2.

Exemple

Cette fonction affiche le nom et l’adresse de tous les symboles classés par adresse virtuelle relative.

void ShowSymbolsByAddress(IDiaSession *pSession)
{
    CComPtr<IDiaEnumSymbolsByAddr> pEnumByAddr;
    if ( FAILED( psession->getSymbolsByAddr( &pEnumByAddr ) ) )
    {
        Fatal( "getSymbolsByAddr" );
    }
    CComPtr<IDiaEnumSymbolsByAddr2> pEnumByAddr2;
    if ( FAILED( pEnumByAddr->QueryInterface( IID_IDiaEnumSymbolsByAddr2, &pEnumByAddr2 ) ) )
    {
        Fatal( "getSymbolsByAddr" );
    }
    CComPtr<IDiaSymbol> pSym;
    if ( FAILED( pEnumByAddr2->symbolByAddrEx( FALSE, 1, 0, &pSym ) ) )
    {
        Fatal( "symbolByAddr" );
    }
    DWORD rvaLast = 0;
    if ( pSym->get_relativeVirtualAddress( &rvaLast ) == S_OK )
    {
        pSym = 0;
        if ( FAILED( pEnumByAddr2->symbolByRVAEx( FALSE, rvaLast, &pSym ) ) )
        {
            Fatal( "symbolByAddr" );
        }
        printf( "Symbols in order\n" );
        do
        {
            CDiaBSTR name;
            if ( pSym->get_name( &name ) != S_OK )
            {
                printf( "\t0x%08X (%ws) <no name>\n", rvaLast );
            }
            else
            {
                printf( "\t0x%08X %ws\n", rvaLast, name );
            }
            pSym = 0;
            celt = 0;
            if ( FAILED( hr = pEnumByAddr2->NextEx( FALSE, 1, &pSym, &celt ) ) )
            {
                break;
            }
        } while ( celt == 1 );
    }
}

Configuration requise

En-tête : Dia2.h

Bibliothèque : diaguids.lib

DLL : msdia140.dll

Voir aussi