Freigeben über


IDiaEnumSymbolsByAddr2

Listet die verschiedenen Symbole, die in der Datenquelle enthalten sind, anhand der Adressen auf.

Syntax

IDiaEnumSymbolsByAddr2 : IDiaEnumSymbolsByAdd

Methoden in Vtable-Reihenfolge

In der folgenden Tabelle sind die Methoden von IDiaEnumSymbolsByAddr2 aufgeführt.

Methode Beschreibung
IDiaEnumSymbolsByAddr2::symbolByAddrEx Positioniert den Enumerator, indem nach Abschnitt und Offset gesucht wird.
IDiaEnumSymbolsByAddr2::symbolByRVAEx Positioniert den Enumerator, indem nach relativer virtueller Adresse (RVA) gesucht wird.
IDiaEnumSymbolsByAddr2::symbolByVAEx Positioniert den Enumerator, indem eine Suche anhand der virtuellen Adresse (VA) durchgeführt wird.
IDiaEnumSymbolsByAddr2::NextEx Ruft die nächsten Symbole in der Reihenfolge anhand der Adresse ab. Aktualisiert die Enumeratorposition anhand der Anzahl der abgerufenen Elemente.
IDiaEnumSymbolsByAddr2::PrevEx Ruft die vorherigen Symbole in der Reihenfolge anhand der Adresse ab. Aktualisiert die Enumeratorposition anhand der Anzahl der abgerufenen Elemente.

Hinweise

Diese Schnittstelle stellt nach Adresse gruppierte Symbole bereit. Um mit Symbolen zu arbeiten, die nach Typ gruppiert sind, z SymTagUDT . B. (benutzerdefinierter Typ) oder SymTagBaseClassverwenden Sie die IDiaEnumSymbols Schnittstelle.

Hinweise für Anrufer

Rufen Sie diese Schnittstelle ab, indem Sie die IDiaSession::getSymbolsByAddr Methode aufrufen und dann IUnknown::QueryInterface den Parameter aufrufen, auf IID_IDiaEnumSymbolsByAddr2den riid der Parameter festgelegt ist.

Beispiel

Diese Funktion zeigt den Namen und die Adresse aller Symbole an, sortiert nach relativer virtueller Adresse.

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

Requirements (Anforderungen)

Header: Dia2.h

Bibliothek: diaguids.lib

DLL: msdia140.dll

Siehe auch