共用方式為


IDiaEnumSymbolsByAddr

依位址列舉資料來源中包含的各種符號。

語法

IDiaEnumSymbolsByAddr : IUnknown

依照 Vtable 順序的方法

下表顯示 IDiaEnumSymbolsByAddr 方法。

方法 描述
IDiaEnumSymbolsByAddr::symbolByAddr 透過按區段和偏移量執行查閱來定位迭代器。
IDiaEnumSymbolsByAddr::symbolByRVA 透過按相對虛擬位址 (RVA) 執行查閱來定位迭代器。
IDiaEnumSymbolsByAddr::symbolByVA 透過按虛擬位址 (VA) 執行查閱來定位迭代器。
IDiaEnumSymbolsByAddr::Next 按位址順序擷取下一個符號。 按擷取的元素數目更新迭代器位置。
IDiaEnumSymbolsByAddr::Prev 按位址順序擷取上一個符號。 按擷取的元素數目更新迭代器位置。
IDiaEnumSymbolsByAddr::Clone 複製物件的複本。

備註

此介面提供按位址分組的符號。 若要使用按類型分組的符號 (例如 SymTagUDT (使用者定義的類型) 或 SymTagBaseClass),請使用 IDiaEnumSymbols 介面。

呼叫端注意事項

呼叫 IDiaSession::getSymbolsByAddr 方法來取得此介面。

範例

此函式會顯示按相對虛擬位址排序之所有符號的名稱和位址。

void ShowSymbolsByAddress(IDiaSession *pSession)
{
    CComPtr<IDiaEnumSymbolsByAddr> pEnumByAddr;
    if ( FAILED( psession->getSymbolsByAddr( &pEnumByAddr ) ) )
    {
        Fatal( "getSymbolsByAddr" );
    }
    CComPtr<IDiaSymbol> pSym;
    if ( FAILED( pEnumByAddr->symbolByAddr( 1, 0, &pSym ) ) )
    {
        Fatal( "symbolByAddr" );
    }
    DWORD rvaLast = 0;
    if ( pSym->get_relativeVirtualAddress( &rvaLast ) == S_OK )
    {
        pSym = 0;
        if ( FAILED( pEnumByAddr->symbolByRVA( 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 = pEnumByAddr->Next( 1, &pSym, &celt ) ) )
            {
                break;
            }
        } while ( celt == 1 );
    }
}

需求

標頭: Dia2.h

程式庫: diaguids.lib

DLL: msdia80.dll

另請參閱