IDiaEnumSymbolsByAddr2

Hitung berdasarkan alamat berbagai simbol yang terkandung dalam sumber data.

Sintaks

IDiaEnumSymbolsByAddr2 : IDiaEnumSymbolsByAdd

Metode dalam Urutan Vtable

Tabel berikut memperlihatkan metode IDiaEnumSymbolsByAddr2.

Metode Deskripsi
IDiaEnumSymbolsByAddr2::symbolByAddrEx Memosisikan enumerator dengan melakukan pencarian berdasarkan bagian dan offset.
IDiaEnumSymbolsByAddr2::symbolByRVAEx Memosisikan enumerator dengan melakukan pencarian dengan alamat virtual relatif (RVA).
IDiaEnumSymbolsByAddr2::symbolByVAEx Memosisikan enumerator dengan melakukan pencarian berdasarkan alamat virtual (VA).
IDiaEnumSymbolsByAddr2::NextEx Mengambil simbol berikutnya secara berurutan berdasarkan alamat. Memperbarui posisi enumerator berdasarkan jumlah elemen yang diambil.
IDiaEnumSymbolsByAddr2::PrevEx Mengambil simbol sebelumnya secara berurutan berdasarkan alamat. Memperbarui posisi enumerator berdasarkan jumlah elemen yang diambil.

Keterangan

Antarmuka ini menyediakan simbol yang dikelompokkan menurut alamat. Untuk bekerja dengan simbol yang dikelompokkan menurut jenis, misalnya SymTagUDT (jenis yang ditentukan pengguna) atau SymTagBaseClass, gunakan IDiaEnumSymbols antarmuka .

Catatan untuk penelepon

Dapatkan antarmuka ini dengan memanggil IDiaSession::getSymbolsByAddr metode dan kemudian memanggil IUnknown::QueryInterface dengan parameter yang riid diatur ke IID_IDiaEnumSymbolsByAddr2.

Contoh

Fungsi ini menampilkan nama dan alamat semua simbol yang diurutkan berdasarkan alamat virtual relatif.

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

Persyaratan

Header: Dia2.h

Library: diaguids.lib

DLL: msdia140.dll

Lihat juga