IDiaEnumSymbolsByAddr2

Vytvoří výčet pomocí adres různých symbolů obsažených ve zdroji dat.

Syntaxe

IDiaEnumSymbolsByAddr2 : IDiaEnumSymbolsByAdd

Metody v pořadí Vtable

Následující tabulka ukazuje metody IDiaEnumSymbolsByAddr2.

metoda Popis
IDiaEnumSymbolsByAddr2::symbolByAddrEx Umístí enumerátor provedením vyhledávání podle oddílu a posunu.
IDiaEnumSymbolsByAddr2::symbolByRVAEx Umístí enumerátor provedením vyhledávání podle relativní virtuální adresy (RVA).
IDiaEnumSymbolsByAddr2::symbolByVAEx Umístí enumerátor provedením vyhledávání podle virtuální adresy (VA).
IDiaEnumSymbolsByAddr2::NextEx Načte další symboly v pořadí podle adresy. Aktualizuje pozici enumerátoru podle počtu načtených prvků.
IDiaEnumSymbolsByAddr2::PrevEx Načte předchozí symboly v pořadí podle adresy. Aktualizuje pozici enumerátoru podle počtu načtených prvků.

Poznámky

Toto rozhraní poskytuje symboly seskupené podle adresy. Pokud chcete pracovat se symboly seskupenými podle typu, například SymTagUDT (typ definovaný uživatelem) nebo SymTagBaseClasspoužijte IDiaEnumSymbols rozhraní.

Poznámky pro volající

Získejte toto rozhraní voláním IDiaSession::getSymbolsByAddr metody a voláním IUnknown::QueryInterface s parametrem nastaveným riid na IID_IDiaEnumSymbolsByAddr2.

Příklad

Tato funkce zobrazí název a adresu všech symbolů seřazených podle relativní virtuální adresy.

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

Požadavky

Hlavička: Dia2.h

Knihovna: diaguids.lib

DLL: msdia140.dll

Viz také